目录
L2-001 紧急救援
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int N = 510, M = 5e5 + 10;
int n, m, s, d;
int e[M], ne[M], h[N], w[M], idx;
int arr[N], dist[N], cnt[N], f[N], pre[N];
bool vis[N];
void add(int a, int b, int c)
{
e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx++;
}
void djikstra() {
memset(dist, 0x3f, sizeof dist);
priority_queue<pii, vector<pii>, greater<pii>> q;
q.push({0,s}); dist[s] = 0; cnt[s] = 1;
f[s] = arr[s];
while (!q.empty()) {
auto [ccc,u] = q.top(); q.pop();
if (vis[u]) continue;
vis[u] = 1;
for (int i=h[u]; i!=-1; i=ne[i]) {
int v = e[i];
if (vis[v]) continue;
if (dist[v] > dist[u] + w[i]) {
pre[v] = u;
dist[v] = dist[u] + w[i];
cnt[v] = cnt[u];
f[v] = f[u] + arr[v];
q.push({dist[v],v});
}
else if (dist[v] == dist[u] + w[i]) {
cnt[v] += cnt[u];
if (f[v] < f[u] + arr[v]) {
f[v] = f[u] + arr[v];
pre[v] = u;
}
}
}
}
}
int main() {
cin >> n >> m >> s >> d;
memset(h, -1, sizeof h);
for (int i=0; i<n; i++) cin >> arr[i];
for (int i=1; i<=m; i++) {
int u,v,d1; cin >> u >> v >> d1;
add(u,v,d1);
add(v,u,d1);
}
djikstra();
cout << cnt[d] << ' ' << f[d] << endl;
vector<int> ans;
ans.push_back(d);
for (int i=pre[d]; i != s; i=pre[i] ) {
ans.push_back(i);
}
reverse(ans.begin(), ans.end());
cout << s << ' ';
for (int i=0; i<ans.size(); i++) {
if (i) cout << ' ';
cout << ans[i];
}
return 0;
}
L2-002 链表去重
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
struct ac
{
int num,next;
}a[100005];
int vis[10005];
int b[100005];
int main()
{
int head,n,i,x,y,z;
memset(vis,0, sizeof(vis));
cin>>head>>n;
while(n--)
{
cin>>x>>y>>z;
a[x].num=y;
a[x].next=z;
}
printf("%05d %d ",head,a[head].num);
int tx=abs(a[head].num);
vis[tx]=1;
int t=head;
int j=0;
while(1)
{
t=a[t].next;
if(t==-1)
{
printf("-1\n");
break;
}
tx=abs(a[t].num);
if(!vis[tx])
{
vis[tx]=1;
printf("%05d\n%05d %d ",t,t,a[t].num);
}
else
{
b[j++]=t;
}
}
if(j>0)
{
printf("%05d %d ",b[0],a[b[0]].num);
for(i=1;i<j;i++)
printf("%05d\n%05d %d ",b[i],b[i],a[b[i]].num);
printf("-1\n");
}
return 0;
}
L2-003 月饼
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
struct Goods
{
double w,v;
bool operator< (const Goods& t) const
{
return v / w > t.v / t.w;
}
}goods[N];
int main() {
int n = 0,m = 0;
cin >> n >> m;
for(int i = 0;i < n;i++) cin >> goods[i].w;
for(int i = 0; i< n;i++) cin >> goods[i].v;
sort(goods,goods + n);
double mon = 0;
for(int i = 0;i < n;i++)
{
if(goods[i].w <= m)
{
mon += goods[i].v;
m -= goods[i].w;
}
else
{
mon +=(double)goods[i].v * m /goods[i].w;
m = 0;
break;
}
}
printf("%.2lf",mon);
return 0;
}
L2-005 集合相似度
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int main() {
int n; cin >> n;
map<int,bool> mp[51];
for (int i=1;i<=n; i++) {
int x; cin >> x;
for (int j=1; j<=x; j++) {
int t; cin >> t;
mp[i][t] = 1;
}
}
int t; cin >> t;
for (int j=1; j<=t; j++) {
int l,r; cin >> l >> r;
int cnt = mp[l].size() + mp[r].size() ;
int c1 = 0;
for (auto x : mp[l]) {
if (mp[r].count(x.first)) c1++;
}
printf("%.2f",(double)c1 / (double)(cnt-c1)*100.0);
printf("%\n");
}
}
L2-006 树的遍历
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int post[44], back[44];
struct tree {
int dat;
tree *l = NULL, *r = NULL;
};
tree* build(int pl, int pr, int el,int er) {
if (pl > pr) return NULL;
tree *p = (tree*) malloc(sizeof(tree));
p->dat = post[pr];
int x = post[pr];
int i = 0;
for (i;i<31; i++) {
if (x == back[i]) break;
}
p->l = build(pl,pl+(i-1-el),el,i-1);
p->r = build(pl+(i-1-el)+1,pr-1,i+1,er);
return p;
}
void bfs(tree *p) {
queue<tree> q;
q.push(*p);
while (!q.empty()) {
tree t = q.front();
q.pop();
if (t.dat != p-> dat) {
cout << " ";
}
cout << t.dat;
if (t.l!=NULL) q.push(*t.l);
if (t.r!=NULL) q.push(*t.r);
}
}
int main() {
int n; cin>>n;
for (int i=0; i<n; i++) cin >> post[i];
for (int i=0; i<n; i++) cin >> back[i];
tree *p = build(0,n-1, 0, n-1);
bfs(p);
}
L2-007 家庭房产
#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int fa[N];
bool vis[N];
double house[N];
double area[N];
int cnt[N];
int find(int x) {
if (fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
void merge(int a, int b) {
int ra = find(a), rb = find(b);
if (ra != rb) {
if (ra < rb) fa[rb] = ra;
else fa[ra] = rb;
}
}
struct Family {
int id;
int cnt;
double avg_house;
double avg_area;
};
int main() {
for (int i = 0; i < N; i++) {
fa[i] = i;
}
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int id, father, mother, k;
cin >> id >> father >> mother >> k;
vis[id] = true;
if (father != -1) {
vis[father] = true;
merge(id, father);
}
if (mother != -1) {
vis[mother] = true;
merge(id, mother);
}
for (int j = 0; j < k; j++) {
int child;
cin >> child;
vis[child] = true;
merge(id, child);
}
double h, a;
cin >> h >> a;
house[id] += h;
area[id] += a;
}
for (int i = 0; i < N; i++) {
if (vis[i]) {
int root = find(i);
cnt[root]++;
}
}
double total_house[N] = {0};
double total_area[N] = {0};
for (int i = 0; i < N; i++) {
if (vis[i]) {
int root = find(i);
total_house[root] += house[i];
total_area[root] += area[i];
}
}
vector<Family> families;
for (int i = 0; i < N; i++) {
if (vis[i] && find(i) == i) {
families.push_back({
i,
cnt[i],
total_house[i] / cnt[i],
total_area[i] / cnt[i]
});
}
}
sort(families.begin(), families.end(), [](const Family& a, const Family& b) {
if (fabs(a.avg_area - b.avg_area) > 1e-6) {
return a.avg_area > b.avg_area;
}
return a.id < b.id;
});
cout << families.size() << endl;
for (const auto& f : families) {
printf("%04d %d %.3lf %.3lf\n", f.id, f.cnt, f.avg_house, f.avg_area);
}
return 0;
}
L2-008 最长对称子串
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int main() {
string s;
getline(cin, s);
int mx = 0, temp;
int len = s.length();
for(int i = 0; i < len; i++) {
temp = 1;
for(int j = 1; j < len; j++) {
if(i - j < 0 || i + j >= len || s[i - j] != s[i + j])
break;
temp += 2;
}
mx = temp > mx ? temp : mx;
temp = 0;
for(int j = 1; j < len; j++) {
if(i - j + 1 < 0 || i + j >= len || s[i - j + 1] != s[i + j])
break;
temp += 2;
}
mx = temp > mx ? temp : mx;
}
cout << mx;
return 0;
}
L2-009 抢红包
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
const int N = 10010;
struct People
{
int id,cnt;
double mon;
}a[N];
bool cmp(People p1, People p2) {
if (abs(p1.mon - p2.mon) > 1e-4) return p1.mon > p2.mon;
else if (p1.cnt != p2.cnt) return p1.cnt > p2.cnt;
else return p1.id < p2.id;
}
int main() {
int n = 0;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
int k = 0;
a[i + 1].id = i + 1;
scanf("%d",&k);
while(k--)
{
int id = 0;
double mon = 0.0;
scanf("%d%lf",&id,&mon);
a[id].mon += mon;
a[id].cnt++;
a[i + 1].mon -= mon;
}
}
sort(a + 1,a + 1 + n, cmp);
for(int i = 1;i <= n;i++)
{
printf("%d %.2lf\n",a[i].id,a[i].mon/100);
}
return 0;
}
L2-010 排座位
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
const int N = 110;
int g[N][N];
int frind[N];
int find(int x)
{
if(x != frind[x]) frind[x] = find(frind[x]);
return frind[x];
}
int main()
{
int n = 0,m = 0,k = 0;
scanf("%d%d%d",&n,&m,&k);
for(int i = 1; i<= n;i++) frind[i] = i;
for(int i = 0;i < m;i++)
{
int a = 0,b = 0,c = 0;
scanf("%d%d%d",&a,&b,&c);
if(c == -1) g[a][b] = g[b][a] = c;
else frind[find(b)] = find(a);
}
while(k--)
{
int a = 0,b = 0;
scanf("%d%d",&a,&b);
if(find(a) == find(b) && g[a][b] != -1) puts("No problem");
else if(find(a) != find(b) && g[a][b] != -1) puts("OK");
else if(find(a) == find(b) && g[a][b] == -1) puts("OK but...");
else puts("No way");
}
return 0;
}
L2-011 玩转二叉树
#include<bits/stdc++.h>
#define lc p<<1
#define rc (p<<1)+1
using namespace std;
int tr[100010];
int a[5000], b[5000];
int idx = 1;
unordered_map<int, int> mp;
void f(int l, int r, int p) {
if(l > r) {
return;
}
tr[p] = b[idx++];
int md = mp[tr[p]];
f(l, md - 1, lc);
f(md + 1, r, rc);
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> a[i];
mp[a[i]] = i;
}
for(int i = 1; i <= n; i++) {
cin >> b[i];
}
f(1, n, 1);
queue<int> q;
q.push(1);
bool fl = 0;
while(q.size()){
int p = q.front();
q.pop();
if(tr[p] == 0) continue;
if(fl) cout << " ";
cout << tr[p];
fl = 1;
q.push(rc);
q.push(lc);
}
return 0;
}
L2-012 关于堆的判断
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int N = 2e3;
int tree[N];
int n, m;
void check(int id) {
if (id > 1 && tree[id] < tree[id/2]) {
swap(tree[id], tree[id/2]);
check(id/2);
}
return ;
}
int main() {
cin >> n >> m;
int t = 1;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
tree[t] = x;
check(t);
t++;
}
cin.ignore();
while (m--) {
string s;
getline(cin, s);
if (s.find("root") != string::npos) {
int x;
sscanf(s.c_str(), "%d is the root", &x);
if (x == tree[1]) {
cout << "T\n";
} else {
cout << "F\n";
}
}
else if (s.find("sib") != string::npos) {
int x, y;
sscanf(s.c_str(), "%d and %d are siblings", &x, &y);
int posx = -1, posy = -1;
for (int i = 1; i < t; i++) {
if (tree[i] == x) posx = i;
if (tree[i] == y) posy = i;
}
if (posx != -1 && posy != -1 && posx / 2 == posy / 2 && posx != posy) {
cout << "T\n";
} else {
cout << "F\n";
}
}
else if (s.find("parent") != string::npos) {
int x, y;
sscanf(s.c_str(), "%d is the parent of %d", &x, &y);
int posx = -1, posy = -1;
for (int i = 1; i < t; i++) {
if (tree[i] == x) posx = i;
if (tree[i] == y) posy = i;
}
if (posx != -1 && posy != -1 && posy / 2 == posx) {
cout << "T\n";
} else {
cout << "F\n";
}
}
else if (s.find("child") != string::npos) {
int x, y;
sscanf(s.c_str(), "%d is a child of %d", &x, &y);
int posx = -1, posy = -1;
for (int i = 1; i < t; i++) {
if (tree[i] == x) posx = i;
if (tree[i] == y) posy = i;
}
if (posx != -1 && posy != -1 && posx / 2 == posy) {
cout << "T\n";
} else {
cout << "F\n";
}
}
}
return 0;
}
L2-013 红色警报
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn1 = 500;
const int maxn2 = 5005;
int count1 = 0;
int pre[maxn1];
struct edge {
int x, y;
}e[maxn2];
int find(int x)
{
while (x != pre[x]) x = pre[x];
return x;
}
void merge(int x, int y)
{
int a = find(x);
int b = find(y);
if (a != b) pre[a] = b;
}
void init()
{
for (int i = 0; i < maxn1; i++) pre[i] = i;
}
int main()
{
int n, k, x, y;
cin >> n >> k;
init();
for (int i = 0; i < k; i++)
{
cin >> x >> y;
e[i].x = x;
e[i].y = y;
merge(x, y);
}
for (int i = 0; i < n; i++)
{
if (pre[i] == i)count1++;
}
int flag[maxn1]{ 0 };
int h;
cin >> h;
for (int i = 0; i < h; i++)
{
cin >> x;
init();
flag[x] = 1;
int count2 = 0;
for (int z = 0; z < k; z++)
{
if (flag[e[z].x] == 0 && flag[e[z].y] == 0)
{
merge(e[z].x, e[z].y);
}
}
for (int j = 0; j < n; j++)
{
if (pre[j] == j && flag[j] == 0)
{
count2++;
}
}
if (count2 > count1)
printf("Red Alert: City %d is lost!\n", x);
else
printf("City %d is lost.\n", x);
if (count2 == 0)
printf("Game Over.\n");
count1 = count2;
}
}
L2-014 列车调度
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int que[100004];
int main() {
int n; cin >> n;
int ans = 0;
for (int i=0; i<n;i ++) {
int x; cin >> x;
int p = lower_bound(que,que+ans, x) - que;
if (p == ans) que[ans++] = x;
else que[p] = x;
}
cout << ans << endl;
}
L2-015 互评成绩
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int main() {
int N, k, M;
cin >> N >> k >> M;
vector<double> fin;
for (int i = 0; i < N; i++) {
vector<double> scores(k);
for (int j = 0; j < k; j++) {
cin >> scores[j];
}
sort(scores.begin(), scores.end());
double sum = 0;
for (int j = 1; j < k - 1; j++) {
sum += scores[j];
}
double avg = sum / (k - 2);
fin.push_back(avg);
}
sort(fin.begin(), fin.end());
for (int i = N - M; i < N; i++) {
if (i != N - M) cout << " ";
printf("%.3f", fin[i]);
}
return 0;
}
L2-016 愿天下有情人都是失散多年的兄妹
#include <bits/stdc++.h>
using namespace std;
struct people
{
int fa = -1;
int mo = -1;
} peo[100000];
map<int, char> sex;
int flag = 0;
void dfs(set<int> &st, int t, int deep)
{
if (deep == 6)
return;
if (st.count(t) == 1)
{
flag = 1;
return;
}
st.insert(t);
if (peo[t].fa != -1)
dfs(st, peo[t].fa, deep + 1);
if (peo[t].mo != -1)
dfs(st, peo[t].mo, deep + 1);
}
void test()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int t1, t2, t3;
char c;
cin >> t1 >> c >> t2 >> t3;
sex[t1] = c;
peo[t1].fa = t2;
peo[t1].mo = t3;
sex[t2] = 'M';
sex[t3] = 'F';
}
int m;
cin >> m;
for (int i = 1; i <= m; i++)
{
int t1, t2;
cin >> t1 >> t2;
if (sex[t1] == sex[t2])
cout << "Never Mind" << endl;
else
{
set<int> st;
flag = 0;
dfs(st, t1, 1);
dfs(st, t2, 1);
if (flag == 0)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
}
}
int main()
{
test();
return 0;
}
L2-017 人以群分
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int main() {
int n = 0; cin >> n;
vector<int> a(n);
for(int i = 0; i < n;i++) cin >> a[i];
sort(a.begin(), a.end());
int cnt = n >> 1;
int dif1 = 0,dif2 = 0,n1 = cnt,n2 = cnt;
for(int i = 0;i < cnt;i++) dif2 += a[i];
for(int i = cnt;i < n;i++) dif1 += a[i];
if(n % 2) n1++;
printf("Outgoing #: %d\nIntroverted #: %d\nDiff = %d\n",n1,n2,abs(dif1 - dif2));
}
L2-019 悄悄关注
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool cmp (pair<string, int> a, pair<string, int> b) {
return a.first < b.first;
}
int main() {
int n; cin >> n;
map<string,int> mp;
for (int i=1; i<=n; i++) {
string s; cin >> s;
mp[s] = 1;
}
int x; cin >> x;
int sum = 0;
vector<pair<string,int>> v;
for (int i=1; i<=x; i++) {
string s; cin >> s;
int c ; cin >> c;
sum += c;
v.push_back(make_pair(s,c));
}
int cnt = 0;
double avg = (double)sum / x;
sort(v.begin(), v.end(), cmp);
for (auto it : v) {
string k = it.first;
int c = it.second;
if (mp.find(k) == mp.end()) {
if (c > avg) {
cout << k << endl;
cnt++;
}
}
}
if (cnt == 0) cout << "Bing Mei You";
}
L2-020 功夫传人
#include<bits/stdc++.h>
using namespace std;
const int LEN = 1e5 + 5;
int main() {
int n;
double Z, r;
cin >> n >> Z >> r;
vector<double> pow(n, 0);
vector<vector<int>> child(n);
vector<int> amp(n, 1);
for (int i = 0; i < n; i++) {
int k;
cin >> k;
if (k == 0) {
int mul;
cin >> mul;
amp[i] = mul;
} else {
for (int j = 0; j < k; j++) {
int id;
cin >> id;
child[i].push_back(id);
}
}
}
queue<int> q;
pow[0] = Z;
q.push(0);
double sum = 0;
while (!q.empty()) {
int cur = q.front();
q.pop();
if (child[cur].empty()) {
sum += pow[cur] * amp[cur];
} else {
double childPower = pow[cur] * (1 - r / 100.0);
for (int child : child[cur]) {
pow[child] = childPower;
q.push(child);
}
}
}
cout << (int)sum << endl;
return 0;
}
L2-021 点赞狂魔
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct people{
string name;
int len;
double average;
}man[101];
double cmp(people a,people b){
if(a.len==b.len)
return a.average<b.average;
return a.len>b.len;
}
int main()
{
ios::sync_with_stdio(false);
int n;
set<int> up;
while(cin>>n){
int temp,pp;
for(int i=0;i<n;i++){
up.clear();
cin>>man[i].name;
cin>>temp;
for(int j=0;j<temp;j++){
cin>>pp;
up.insert(pp);
}
man[i].len=up.size();
man[i].average=(double)temp/man[i].len;
}
sort(man,man+n,cmp);
n=min(n,3);
for(int i=0;i<n;i++){
if(i)
cout<<" ";
cout<<man[i].name;
}
for(int i=n;i<3;i++){
if(i)
cout<<" ";
cout<<"-";
}
cout<<endl;
}
return 0;
}
L2-022 重排链表
#include <bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long ll;
struct node{
int id, data, next;
};
int main()
{
int begin , n;
cin >> begin >>n;
node a[100003];
vector<node> v, ans;
for(int i = 0 ; i < n ; i++) {
int t1, t2, t3; cin >> t1 >> t2 >> t3;
a[t1] = {t1,t2,t3};
}
while (begin != -1) {
v.push_back(a[begin]);
begin = a[begin].next;
}
int l = 0 , r = v.size() - 1;
while (1) {
ans.push_back(v[r]);
r--;
if ((r+1) - (l-1) == 1) break;
ans.push_back(v[l]);
l++;
if ((r+1) - (l-1) == 1) break;
}
for(int i = 0; i < ans.size(); i++) {
if(i != ans.size() - 1)
printf("%05d %d %05d\n", ans[i].id, ans[i].data, ans[i+1].id);
else
printf("%05d %d -1\n", ans[i].id, ans[i].data);
}
return 0;
}
L2-023 图着色问题
#include <bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long ll;
vector<int> v[510];
bool vis[510];
int n,m,k;
int main()
{
cin >> n >> m >> k;
for (int cc = 0; cc < m; cc++) {
int l, r; cin >> l >> r;
v[l].push_back(r);
v[r].push_back(l);
}
int t; cin >> t;
while (t--) {
int color[n+1];
memset(vis, false, sizeof(vis));
set<int> check;
for (int i=1; i<=n; i++) {
cin >> color[i];
check.insert(color[i]);
}
if (check.size() != k) {
cout << "No\n";
continue;
}
else {
int flag = 1;
for (int i=1; i<=n; i++) {
vector<int> c = v[i];
for (int xx : c) {
if (color[xx] == color[i] && xx > i) {
flag = 0;
}
}
}
if (flag) {
cout << "Yes\n";
}
else {
cout << "No\n";
}
}
}
}
L2-024 部落
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int fa[10003];
set<int> num;
int find(int x) {
if (fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
int main() {
int n; cin >> n;
for (int i=1; i<=10000; i++) fa[i] = i;
int id = 0;
for (int i=0; i<n; i++) {
int x; cin >> x;
int a; cin >> a;
num.insert(a);
if (a>id) id = a;
for (int i=0; i<x-1; i++) {
int b; cin >> b;
if (b > id) id = b;
num.insert(b);
fa[find(b)] = find(a);
}
}
int cnt = 0;
for (int i=1; i<=id; i++) {
if (fa[i] == i) cnt++;
}
cout << num.size() << " " << cnt << endl;
int m; cin >> m;
for (int i=0; i<m; i++) {
int a,b; cin >> a >> b;
if (find(a) == find(b)) cout << "Y" << endl;
else cout << "N" << endl;
}
}
L2-025 分而治之
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
int main() {
int n,m; cin >> n >> m;
vector<pii> e;
bool vis[n+1];
for (int i = 0; i < m; i++) {
int u, v; cin >> u >> v;
e.push_back({u,v});
}
int k; cin >> k;
while (k--) {
bool can = 0;
memset(vis, false, sizeof(vis));
int x; cin >> x;
for (int i=0; i<x; i++) {
int t; cin >> t;
vis[t] = 1;
}
for (auto u : e) {
if (vis[u.first] == 0 && vis[u.second] == 0) {
can = 1;
}
}
if (can) cout << "NO\n";
else cout << "YES\n";
}
}
L2-026 小字辈
#include <bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
typedef long long ll;
struct S{
vector<int> son;
int dai;
};
int n,root;
vector<bool> vis(1e5+1);
vector<S> son(1e5 +1); // son.first = son.id,,son.second代指辈数
int main()
{
cin >> n;
for (int i=1; i<=n; i++) {
int x; cin >> x;
if (x == -1) {
root = i;
son[root].dai = 1;
}
else {
son[x].son.push_back(i);
}
}
queue<int> que;
que.push(root);
int mx = 1;
while (!que.empty()) {
int u = que.front();
que.pop();
if (vis[u]) continue;
vis[u] = true;
for (auto x : son[u].son) {
son[x].dai = son[u].dai + 1;
mx = max(mx, son[x].dai);
que.push(x);
}
}
vector<int> ans;
for (int i=1; i<=n; i++) {
if (son[i].dai == mx) {
ans.push_back(i);
}
}
cout << mx << endl;
sort(ans.begin(),ans.end());
for (int i=0; i<ans.size(); i++) {
if (i) cout << ' ';
cout << ans[i];
}
}
L2-027 名人堂与代金券
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<string, int> a, pair<string, int> b) {
if (a.second != b.second) return a.second > b.second;
return a.first < b.first;
}
int main() {
int N, G, K;
cin >> N >> G >> K;
vector<pair<string, int>> stu(N);
int total = 0;
for (int i = 0; i < N; i++) {
cin >> stu[i].first >> stu[i].second;
if (stu[i].second >= G) total += 50;
else if (stu[i].second >= 60) total += 20;
}
cout << total << endl;
sort(stu.begin(), stu.end(), cmp);
int rank = 1;
for (int i = 0; i < N && rank <= K; i++) {
if (i > 0 && stu[i].second != stu[i-1].second) {
rank = i + 1;
}
if (rank <= K) {
cout << rank << " " << stu[i].first << " " << stu[i].second << endl;
}
}
return 0;
}
L2-028 秀恩爱分得快
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int n,m,k,kk,xb[N],a[505],p,x,y;
double g[N][N];
string ct[N],t;
int toi(string s){
int x=0;
if(s[0]=='-')
for(int i=1; i<s.size(); i++)x*=10,x+=s[i]-'0';
else for(int i=0; i<s.size(); i++)x*=10,x+=s[i]-'0';
return x;
}
int main(){
cin >> n >> m;
while(m--){
cin >> k; kk = k; p=0;
while(kk--) {
cin >> t;
int tn=toi(t);
if(t[0]=='-') xb[tn]=1;
else xb[tn]=2;
a[p++] = tn;
}
double k1=1.0/k;
for(int i=0; i<k-1; i++){
for(int j=i+1; j<k; j++){
if(xb[a[i]] == xb[a[j]]) continue;
g[a[i]][a[j]] += k1; g[a[j]][a[i]] = g[a[i]][a[j]];
}
}
}
cin >> t; x=toi(t);
if(t[0]=='-') xb[x]=1; else xb[x]=2;
cin >> t; y=toi(t);
if(t[0]=='-') xb[y] = 1; else xb[y]=2;
for(int i=0; i<n; i++)if(xb[i]==1)ct[i]="-";else ct[i]="";
double ma=0, mb=0;
for(int i=0; i<n; i++) if(xb[i]!=xb[x]) ma = max(ma,g[x][i]);
for(int i=0; i<n; i++) if(xb[i]!=xb[y]) mb = max(mb,g[y][i]);
if(ma==mb && g[x][y]==ma) cout << ct[x] << x << " " << ct[y] << y << endl;
else {
for(int i=0; i<n; i++) if(g[x][i]==ma && xb[x]!=xb[i]) cout << ct[x] << x << " " << ct[i] << i << endl;
for(int i=0; i<n; i++) if(g[y][i]==mb && xb[y]!=xb[i]) cout << ct[y] << y << " " << ct[i] << i << endl;
}
return 0;
}
L2-029 特立独行的幸福
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e4+3;
int A, B, flag, num[10001], notIndep[10001];
bool isPrime(int a) {
if (a == 1) return false;
for (int i = 2; i <= sqrt(a); i++)
if (a % i == 0) return false;
return true;
}
bool isIndep(int x) {
set<int> mark;
int X = x, temp1, temp2;
while (X != 1) {
mark.insert(X);
temp1 = 0;
while (X) {
temp2 = X % 10;
X /= 10;
temp1 += temp2 * temp2;
}
num[x]++;
notIndep[temp1] = 1;
X = temp1;
if (mark.count(X)) return false;
}
return true;
}
int main() {
cin >> a >> b;
vector<int> ans;
for (int i=a; i<=b; i++)
if (isIndep(i)) ans.push_back(i);
for (int i = 0; i < ans.size(); i++) {
if (isPrime(ans[i])) num[ans[i]] <<= 1;
if (!notIndep[ans[i]]) {
cout << ans[i] << ' ' << num[ans[i]] << endl;
flag = 1;
}
}
if (!flag) cout << "SAD";
return 0;
}
L2-030 冰岛人
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9;
map<string, pair<int,string>> mp;
string check(string s1, string s2) {
int c1 = 0, c2;
while (s1 != "") {
c2 = 0;
string b = s2;
while (b != "") {
if (s1 == b && (c1 < 4 || c2 < 4)) {
return "No\n";
}
if (c1 >= 4 && c2 >= 4) return "Yes\n";
b = mp[b].second;
c2++;
}
s1 = mp[s1].second;
c1++;
}
return "Yes\n";
}
int main() {
int n; cin >> n;
cin.ignore();
while (n--) {
string s1, s2; cin >> s1 >> s2;
if (s2.back() == 'n') {
mp[s1].first = 1;
mp[s1].second = s2.substr(0,s2.length() - 4);
}
else if (s2.back() == 'r') {
mp[s1].first = 0;
mp[s1].second = s2.substr(0, s2.length() - 7);
}
else if (s2.back() == 'm') mp[s1].first = 1;
else mp[s1].first = 0;
}
int t; cin >> t;
while (t--) {
string s1, s2 ,t;
cin >> s1 >> t >> s2 >> t;
if (!mp.count(s1) || !mp.count(s2)) {
cout << "NA\n";
}
else if (mp[s1].first == mp[s2].first) {
cout << "Whatever\n";
}
else cout << check(s1,s2);
}
return 0;
}
L2-031 深入虎穴
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int main() {
int n; cin >> n;
vector<pair<int,vector<int>>> tre(n+1);
vector<bool> have(n+1, 0);
for (int i=1; i<=n; i++) {
int t; cin >> t;
while (t--) {
int x ;cin >> x;
have[x] = 1;
tre[i].second.push_back(x);
tre[i].first = 0;
}
}
int mx=1, mxid=1;
queue<int> q;
int root;
for (int i=1; i<=n; i++) if (!have[i]) root = i;
q.push(root);
tre[root].first = 1;
vector<bool> vis(n+1, false);
while (!q.empty()) {
int u=q.front(); q.pop();
if (vis[u]) continue;
vis[u] = 1;
for (auto x : tre[u].second) {
tre[x].first = tre[u].first + 1;
if (tre[x].first > mx) {
mx = tre[x].first;
mxid = x;
}
q.push(x);
}
}
cout << mxid;
}
L2-032 彩虹瓶
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m, k;
cin >> n >> m >> k;
while (k--) {
stack<int> st;
int need = 1;
bool s = 1;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
if (!s) continue;
if (x == need) {
need++;
while (!st.empty() && st.top() == need) {
st.pop();
need++;
}
}
else {
st.push(x);
if (st.size() > m) {
s = 0;
}
}
}
if (s && need == n + 1) {
cout << "YES\n";
} else {
cout << "NO\n";
}
}
return 0;
}
L2-033 简单计算器
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int N = 201;
int main()
{
stack<int> s1;
stack<char> s2;
int n; cin >> n;
for(int i=0; i<n ;i++) {
int x; cin >> x;
s1.push(x);
}
for(int i=1; i<n; i++) {
char k ;cin >> k;
s2.push(k);
}
while(1) {
if(s1.size() == 1 && s2.empty()) {
int t = s1.top();
cout << t;
return 0;
}
char k = s2.top(); s2.pop();
int c1 = s1.top(); s1.pop();
int c2 = s1.top(); s1.pop();
if(k == '-') {
c2 = c2 - c1;
}
else if(k == '+') {
c2 = c2 + c1;
}
else if(k == '*') {
c2 = c2 * c1;
}
else {
if(c1 == 0) {
cout << "ERROR: " << c2 << "/0";
return 0;
}
c2 = c2 / c1;
}
s1.push(c2);
}
cout << s1.top();
}
L2-034 口罩发放
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct rec {
string nam, id;
int sta, h, m, idx;
};
bool ok(const string& id) {
if (id.size() != 18) return 0;
for (char c : id) {
if (!isdigit(c)) return 0;
}
return 1;
}
bool cmp(const rec& a, const rec& b) {
if (a.h != b.h) return a.h < b.h;
if (a.m != b.m) return a.m < b.m;
return a.idx < b.idx;
}
int main() {
int d, p;
cin >> d >> p;
map<string, int> lst;
map<string, bool> vis;
vector<pair<string, string>> out;
for (int day = 1; day <= d; day++) {
int ti, si;
cin >> ti >> si;
vector<rec> cur;
for (int i = 0; i < ti; i++) {
string nam, id, tim;
int sta;
cin >> nam >> id >> sta >> tim;
int h = stoi(tim.substr(0, 2));
int m = stoi(tim.substr(3, 2));
if (!ok(id)) continue;
if (sta == 1 && !vis[id]) {
vis[id] = true;
out.push_back({nam, id});
}
cur.push_back({nam, id, sta, h, m, i});
}
sort(cur.begin(), cur.end(), cmp);
int cnt = 0;
for (auto& r : cur) {
if (cnt >= si) break;
if (lst.count(r.id) && day - lst[r.id] <= p) continue;
cout << r.nam << " " << r.id << endl;
lst[r.id] = day;
cnt++;
}
}
for (auto& p : out) {
cout << p.first << " " << p.second << endl;
}
return 0;
}
L2-035 完全二叉树的层序遍历
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int N = 201;
int pre[44], bac[44];
int main()
{
int n; cin >> n;
int cnt = 1;
for(int i=1; i<=n; i++) cin >> bac[i];
function<void(int)> dfs= [&] (int st) -> void {
if(st < 1 || st > n) return ;
dfs(st * 2);
dfs(st * 2 + 1);
pre[st] = bac[cnt++];
};
dfs(1);
for(int i=1; i<=n; i++) {
if(i > 1) cout << ' ';
cout << pre[i];
}
}
L2-036 网红点打卡攻略
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
int G[210][210];
bool vis[220];
bool cmp(pii a, pii b) {
if (a.second != b.second) return a.second < b.second;
return a.first < b.first;
}
int main() {
int n, m; cin >> n >> m;
for (int i=0; i<m; i++) {
int u, v, w; cin >> u >> v >> w;
G[u][v] = w;
G[v][u] = w;
}
int t; cin >> t;
vector<int> res;
vector<pii> can;
for (int k=1; k<=t; k++) {
memset(vis ,0, sizeof(vis));
int x; cin >> x;
int a[x+1];
for (int i=1; i<=x; i++) {
cin >> a[i];
if (vis[a[i]]) vis[0] = 1;
else vis[a[i]] = 1;
}
int cost = 0, now = 0;
if (vis[0] || x != n) {
continue;
}
bool f = 1;
for (int i=1; i<=x; i++) {
int u = a[i];
if (G[now][u] == 0){
f = 0;
break;
}
cost += G[now][u];
now = u;
}
if (G[now][0] == 0) f = 0;
else cost += G[now][0];
if (f) {
can.push_back({k, cost});
}
}
cout << can.size() << endl;
sort(can.begin(), can.end(), cmp);
cout << can[0].first << ' ' << can[0].second;
return 0;
}
L2-037 包装机
#include <bits/stdc++.h>
#define cin std::cin
#define cout std::cout
#define endl std::endl
#define ll long long
#define pii std::pair<int, int>
const int N = 1e5 + 3;
int main() {
int n, m, len;
cin >> n >> m >> len;
std::string s[n + 1];
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
std::string ans = "";
int x;
std::stack<char> st;
while (true) {
cin >> x;
if (x == -1) break;
if (x == 0) {
if (!st.empty()) {
char c = st.top();
st.pop();
ans += c;
}
} else {
if (x < 1 || x > n) continue;
if (s[x].empty()) continue;
if (st.size() == len) {
if (!st.empty()) {
char ss = st.top();
st.pop();
ans += ss;
}
char k = s[x][0];
s[x].erase(0, 1);
st.push(k);
} else {
char k = s[x][0];
s[x].erase(0, 1);
st.push(k);
}
}
}
cout << ans << endl;
return 0;
}
L2-038 病毒溯源
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int N = 1e4;
vector<int> no, ans;// now 为 局部最优解,,,ans为 全局最优
vector<int> v[N];
int mx = -1;
void dfs(int now, int fa, int dep) {
if (dep > mx) {
mx = dep;
ans = no;
}
for (auto x : v[now]) {
no.push_back(x);
dfs(x, now, dep + 1);
no.pop_back();
}
return ;
}
int main() {
ios_base::sync_with_stdio(false);
int n; cin >> n;
vector<bool> vis(n, 0);
for (int i=0; i<n; i++) {
int t; cin >> t;
while (t--) {
int x; cin >> x;
vis[x] = 1;
v[i].push_back(x);
}
sort(v[i].begin(), v[i].end());
}
int root = -1;
for (int i=0; i<n; i++) {
if (!vis[i]) {
root = i;
break;
}
}
no.push_back(root);
dfs(root, -1, 1);
cout << ans.size() << endl;
for (int i=0; i<ans.size(); i++) {
if (i) cout << ' ';
cout << ans[i];
}
}
L2-039 清点代码库
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
map<vector<int>, int> cnt;
for (int i = 0; i < n; i++) {
vector<int> a(m);
for (int j = 0; j < m; j++) {
cin >> a[j];
}
cnt[a]++;
}
vector<pair<vector<int>, int>> ans(cnt.begin(), cnt.end());
sort(ans.begin(), ans.end(), [](auto& a, auto& b) {
if (a.second != b.second) return a.second > b.second;
return a.first < b.first;
});
cout << ans.size() << endl;
for (auto& [vec, c] : ans) {
cout << c;
for (int x : vec) {
cout << " " << x;
}
cout << endl;
}
return 0;
}
L2-040 哲哲打游戏
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
int main() {
int n,m; cin >> n >> m;
vector<int> mp[n+1];
int a[n+1]; memset(a, 0, sizeof a);
for(int i=1; i<=n; i++) {
int t; cin >> t;
for(int j=1; j<=t; j++) {
int x; cin >> x;
mp[i].push_back(x);
}
}
int now = 1;
for(int a_=1; a_<=m; a_++) {
int op; cin >> op;
if(op == 0) {
int x; cin >> x;
now = mp[now][x-1];
}
else if(op == 1) {
int x; cin >> x;
a[x] = now;
cout << now << endl;
}
else {
int x; cin >> x;
now = a[x];
}
}
cout << now;
return 0;
}
L2-041 插松枝
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
int main() {
int n,m,k; cin >> n >> m >> k;
stack<int> box;
queue<int> pusher;
for(int i=1; i<=n; i++) {
int x; cin >> x;
pusher.push(x);
}
while(1) {
deque<int> branch;
while(branch.size() < k) {
int take = -1;
if(!box.empty() && (branch.empty() || box.top() <= branch.back())) {
take = box.top();
box.pop();
} else if(!pusher.empty()) {
int cur = pusher.front();
if(branch.empty() || cur <= branch.back()) {
take = cur;
pusher.pop();
} else {
if(box.size() < m) {
box.push(cur);
pusher.pop();
continue;
} else {
break;
}
}
} else {
break;
}
if(take != -1) {
branch.push_back(take);
}
}
if(branch.empty()) break;
for(int i=0; i<branch.size(); i++) {
if(i) cout << ' ';
cout << branch[i];
}
cout << '\n';
}
return 0;
}
L2-042 老板的作息表
#include<bits/stdc++.h>
#define ll lnog long
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
const int N = 2e5 + 5;
int main () {
ios_base::sync_with_stdio(false);
int n; cin >> n;
cin.ignore();
vector<string> s(n);
for (int i=0; i<n; i++) {
getline(cin, s[i]);
}
sort(s.begin(), s.end());
string begin = "00:00:00";
if (s[0].find(begin) == string :: npos) {
cout << begin << " - " << s[0].substr(0,8) << endl;
}
for (int i=0; i<n-1; i++) {
if (s[i+1].find(s[i].substr(11,8)) != string :: npos) {
continue;
}
cout << s[i].substr(11,8) << " - " << s[i+1].substr(0,8);
cout << endl;
}
string end = "23:59:59";
string kk = s[n-1].substr(11,8);
if (kk != end) {
cout << kk << " - " << end;
}
}
L2-045 堆宝塔
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n;
stack<int> a, b;
vector<int> t;
for (int i = 0; i < n; i++) {
int x; cin >> x;
if (a.empty() || a.top() > x) {
a.push(x);
}
else {
if (b.empty() || b.top() < x) {
b.push(x);
}
else {
t.push_back(a.size());
while (!a.empty()) a.pop();
stack<int> temp;
while (!b.empty() && b.top() > x) {
temp.push(b.top());
b.pop();
}
while (!temp.empty()) {
a.push(temp.top());
temp.pop();
}
a.push(x);
}
}
}
if (!a.empty()) {
t.push_back(a.size());
while (!a.empty()) a.pop();
}
if (!b.empty()) {
t.push_back(b.size());
while (!b.empty()) b.pop();
}
cout << t.size() << " " << *max_element(t.begin(), t.end());
return 0;
}
L2-046 天梯赛的赛场安排
#include<bits/stdc++.h>
using namespace std;
struct uni {
string id;
int a, b, c;
};
bool cmp1(uni x, uni y) { return x.a > y.a; }
bool cmp2(uni x, uni y) { return x.c < y.c; }
int main() {
int n, m;
cin >> n >> m;
vector<uni> u(n);
int sum = 0;
for (int i=0; i<n; i++) {
cin >> u[i].id >> u[i].a;
u[i].b = u[i].a / m;
u[i].a %= m;
u[i].c = i;
sum += u[i].b;
}
sort(u.begin(), u.end(), cmp1);
vector<int> v;
for (int i=0; i<n; i++) {
if (u[i].a == 0) continue;
int ok = 0;
for (int j=0; j<v.size(); j++) {
if (u[i].a <= m - v[j]) {
v[j] += u[i].a;
u[i].b++;
ok = 1;
break;
}
}
if (!ok) {
v.push_back(u[i].a);
u[i].b++;
}
}
sort(u.begin(), u.end(), cmp2);
for (int i=0; i<n; i++) {
cout << u[i].id << ' ' << u[i].b << endl;
}
cout << sum + v.size() << endl;
return 0;
}
L2-048 寻宝图
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int dx[4] = {0,0,1,-1},
dy[4] = {1,-1,0,0};
int main() {
ios_base::sync_with_stdio(false);
int n,m; cin >> n >> m;
vector<vector<char>> mp(n, vector<char>(m,NULL));
for (int i = 0; i < n; i++) {
for (int j=0; j<m; j++) {
cin >> mp[i][j];
}
}
bool flag = 0;
vector<vector<bool>> vis(n, vector<bool> (m, 0));
function <void(int,int)> dfs = [&](int i,int j)-> void {
if (mp[i][j] == '0') return ;
vis[i][j] = 1;
if (mp[i][j] != '1') flag = 1;
for (int k=0; k<4; k++) {
int xx = i + dx[k],
yy = j + dy[k];
if (xx < 0 || xx >=n || yy < 0 || yy >= m || vis[xx][yy]) continue;
dfs(xx,yy);
}
};
int c1=0, c2=0;
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
flag = 0;
if (mp[i][j] == '0') continue;
if (vis[i][j]) continue;
dfs(i,j);
c1++;
if (flag) c2++;
}
}
cout << c1 << ' ' << c2;
}
L2-049 鱼与熊掌
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
int main() {
int n,m; cin >> n >> m;
set<int> s[n+1];
for (int i=1; i<=n; i++ ) {
int x; cin >> x;
for (int j=1; j<=x; j++) {
int c1; cin >> c1;
s[i].insert(c1);
}
}
int x; cin >> x;
for (int i=1; i<=x; i++) {
int a,b; cin >> a >> b;
int ans = 0;
for (int i=1; i<=n; i++) {
if (s[i].find(a) != s[i].end()&&s[i].find(b)!=s[i].end()) ans++;
}
cout << ans << "\n";
}
}
L2-050 懂蛇语
#include <bits/stdc++.h>
using namespace std;
map<string, vector<string>> mp;
int N;
signed main(){
cin >> N;
getchar();
string s;
for(int i=1; i<=N; i++){
getline(cin, s);
string tmp = "";
for(int i=0; i<s.size(); i++){
if((i == 0 || s[i-1] == ' ') && s[i] != ' ') tmp += s[i];
}
mp[tmp].push_back(s);
}
for(auto &x :mp){
sort(x.second.begin(), x.second.end());
}
int M; cin >> M;
getchar();
while(M--){
string s; getline(cin, s);
string tmp = "";
for(int i=0; i<s.size(); i++){
if((!i || s[i-1] == ' ') && s[i] != ' ') tmp += s[i];
}
if(mp[tmp].size() == 0) cout << s << endl;
else{
int cnt = 0;
for(auto &x: mp[tmp]){
if(!cnt){
cout << x; ++cnt;
}else cout << "|" << x;
}
cout << endl;
}
}
return 0;
}
L2-051 满树的遍历
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e9;
vector<int> g[100005];
set<int> se;
int n, front, flag;
void dfs(int x) {
if (flag) cout << " ";
flag = 1;
cout << x;
sort(g[x].begin(), g[x].end());
for (auto c : g[x]) dfs(c);
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
if (x) g[x].push_back(i);
else front = i;
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
int c = (int)g[i].size();
cnt = max(c, cnt);
if (c != 0) {
se.insert(c);
}
}
if (n == 1) {
cout << "0 yes\n";
}
else if (se.size() != 1) {
cout << cnt << " no\n";
}
else {
cout << cnt << " yes\n";
}
flag = 0;
dfs(front);
cout << endl;
return 0;
}
L2-052 吉利矩阵
#include<iostream>
#include<vector>
#define cin std:: cin
#define cout std:: cout
#define endl std:: endl
#define ll long long
#define pii pair<int, int>
const int N = 1e5 + 3;
ll res;
int l,n;
int h[N], L[N], cnt;
int col_total[7],row_total[7];
void dfs(int x,int y)
{
if(x==n+1&&y==1)
{
for(int i=1;i<=n;i++)
{
if(row_total[i]!=l || col_total[i]!=l)
{
return;
}
}
cnt++;
return;
}
for(int i=0;i<=9;i++)
{
if(col_total[x]+i<=l && row_total[y]<=l)
{
col_total[x]+=i;
row_total[y]+=i;
if(y==n && col_total[x]!=l)
{
col_total[x]-=i;
row_total[y]-=i;
continue;
}
if(x==n && row_total[y]!=l)
{
col_total[x]-=i;
row_total[y]-=i;
continue;
}
if(y<n) dfs(x,y+1);
else dfs(x+1,1);
col_total[x]-=i;
row_total[y]-=i;
}
}
}
int main() {
cin >> l >> n;
dfs(1,1);
cout << cnt << endl;
return 0;
}
L2-053 算式拆解
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
const int N = 2e5+1;
int tr[111], cudu[111];
signed main() {
string s; cin >> s;
stack<char> st;
for (int i=0; i<s.size(); i++) {
if (s[i] == '(') {
st.push(s[i]);
}
else if (s[i] == ')'){
stack<char> st2;
while (st.top() != '(') {
st2.push(st.top()); st.pop();
}
while (!st2.empty()) {
cout << st2.top();
st2.pop();
}
st.pop();
cout << endl;
}
else {
st.push(s[i]);
}
}
return 0;
}
L2-055 胖达的山头
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
#define LL long long
#define PII pair<int,int>
#define pii pair<int,PII>
int a[1000010],b[1000010];
int main() {
int n; cin >> n;
int maxx = 0;
while(n--)
{
string s1,s2;
cin >> s1 >> s2;
int l=0,r=0;
l += 3600 * (10*(s1[0]-'0') + (s1[1]-'0'));
l += 60 * (10*(s1[3]-'0') + (s1[4]-'0'));
l += 10*(s1[6]-'0') + (s1[7]-'0');
r += 3600 * (10*(s2[0]-'0') + (s2[1]-'0'));
r += 60 * (10*(s2[3]-'0') + (s2[4]-'0'));
r += 10*(s2[6]-'0') + (s2[7]-'0');
a[l]++;
a[r+1]--;
}
b[0] = a[0];
maxx = max(maxx,b[0]);
for(int i=1;i<=1000010;i++)
{
b[i]=b[i-1]+a[i];
maxx=max(b[i],maxx);
}
cout << maxx << endl;
}
L2-056 被n整除的n位数
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
const int N = 2e5+1;
int tr[111], cudu[111];
int n, l, r;
set<int> ans;
void dfs(int x, int len) {
if (x % len != 0) return;
if (len == n) {
if (x <= r && x >= l) ans.insert(x);
return;
}
for (int i=0; i<10; i++) {
dfs(x * 10 + i, len+1);
}
}
signed main() {
cin >> n >> l >> r;
for (int i=1 ;i<=9; i++) {
dfs(i, 1);
}
for (auto x : ans) {
cout << x << endl;
}
if (ans.size() == 0) cout << "No Solution";
return 0;
}
649

被折叠的 条评论
为什么被折叠?



