round 633
A
n种即可
B
头尾开始取或中间开始取都可
#include <bits/stdc++.h> #define debug freopen("r.txt","r",stdin) #define mp make_pair using namespace std; typedef long long ll; const int maxn = 2e6+6; const int INF = 0x3f3f3f3f; const int mod = 998244353; inline ll read(){ll s=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w;} ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;} int t,n,i,a[maxn],f,l,r,b[maxn],k; int main() { // debug; t=read(); while (t--) { n=read(); for (i=1;i<=n;i++) a[i]=read(); sort(a+1,a+1+n); l=1,r=n;f=1;k=0; while (l<=r) { if (f==1) { b[++k]=a[l]; f*=-1; l++; } else { b[++k]=a[r]; f*=-1; r--; } } for (i=n;i;i--) cout<<b[i]<<" "; cout<<endl; } }
C
看错题目,以为只能连续区间的元素加2^(x-1),结果题目意思是可以在第x秒选一些元素让它们都加上2^(x-1)
只能感叹一下自己的英语水平像shi一样
改编一段台词,回复一下已经崩了的心态
选自《无间道1》
我:挺倒霉的。
出题人:我也出过题意易懂的题目。
我:哼,你们这些出题人真有毛病,老喜欢出些迷惑性强的数据。
出题人:我不像你,我不用比赛。我要的题解呢?
我:我要的rating分你也未必给我。
出题人:什么意思?你上来谈条件的?
我:给我上rating分。
出题人:怎么给你上rating分?
我:我以前没好好学习英语,现在我只想读懂题意然后AC。
出题人:好,跟评测机说,看它让不让你AC。
我:那你就是让我死?
出题人:对不起,我是出题人。
我:我错了…
学好英语,很有必要
#include <bits/stdc++.h> #define debug freopen("r.txt","r",stdin) #define mp make_pair using namespace std; typedef long long ll; const int maxn = 2e5+6; const int INF = 0x3f3f3f3f; const int mod = 998244353; inline ll read(){ll s=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w;} ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;} int t,n,i,a[maxn],maxx,maxxx; int main() { t=read(); while (t--) { n=read(); for (i=1;i<=n;i++) a[i]=read(); maxx=-INF; maxxx=0; for (i=1;i<=n;i++) { if (a[i]>maxx) maxx=a[i]; else maxxx=max(maxxx,maxx-a[i]); } if (maxxx==0) cout<<0<<endl; else { for (i=40;i>=0;i--) if ((1ll<<i)&maxxx) { cout<<i+1<<endl; break; } } } return 0; }
D
对于最小的f,总是可以用不多于3个数字。如果每个叶子点对之间的距离都是偶数(即所有叶子点奇偶性都是偶数),那么最小f为1,否则为3。
对于最大的f,为所有边的个数减去(每个C点连接的叶子点个数(未合并前) - 1)
图源于cf官方题解
#include <bits/stdc++.h> #define debug freopen("r.txt","r",stdin) #define mp make_pair using namespace std; typedef long long ll; const int maxn = 2e5+6; const int INF = 0x3f3f3f3f; const int mod = 998244353; inline ll read(){ll s=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w;} ll qpow(ll p,ll q){return (q&1?p:1)*(q?qpow(p*p%mod,q/2):1)%mod;} int n,i,x,y,du[maxn],lca[maxn],leave,noleave,check[maxn],cnt,minn,maxx; vector <int> G[maxn]; bool t; void dfs(int u,int father,int step) { if (check[u] && step) { t=true; } for (auto v:G[u]) { if (v==father) continue; dfs(v,u,step^1); } } int main() { n=read(); memset(check,false,sizeof(check)); for (i=1;i<n;i++) { x=read(),y=read(); G[x].push_back(y); G[y].push_back(x); du[x]++,du[y]++; } for (i=1;i<=n;i++) if (du[i]==1) { leave++; lca[++cnt]=G[i][0]; } minn=1; t=false; sort(lca+1,lca+1+cnt); int num=unique(lca+1,lca+1+cnt)-lca-1; for (i=1;i<=num;i++) { check[lca[i]]=true; noleave++; } dfs(lca[1],0,0); if (t) minn=3; cout<<minn<<" "<<n-leave+noleave-1<<endl; }