Codeforces Round 628 (Div. 2)
A. EhAb AnD gCd
void solve(){ int n=read(); for(int i=1;i*i<=n;i++){ int g=__gcd(i,n-i); if(g*g+i*(n-i)==n*g){ cout<<i<<" "<<n-i<<endl; break; } } //puts(ans>0?"YES":"NO"); //puts(ans>0?"Yes":"No"); }
B. CopyCopyCopyCopyCopy
void solve(){ int n=read(); vector<int>a; for(int i=0;i<n;i++){ int x=read(); a.push_back(x); } sort(a.begin(),a.end()); a.erase(unique(a.begin(),a.end()),a.end()); cout<<a.size()<<endl; //puts(ans>0?"YES":"NO"); //puts(ans>0?"Yes":"No"); }
C. Ehab and Path-etic MEXs
先考虑特殊情况 若为一条链 则明显的 直接输出0—n-1
考虑普通情况: 先肯定0被选中的时候 MEX为1 其次01同时选中时MEX为2 且这两种情况必然发生
若0,1,2同时被选中 则MEX为3
若0,1,2不同时被选中 整棵树的最大MEX为2
所以0,1,2不被同时选中 选择一个有三条边的点放置0,1,2
int ans[N]; vector<int>a[N]; void solve(){ int n=read(); for(int i=1;i<n;i++){ int x=read(),y=read(); a[x].push_back(i); a[y].push_back(i); } int cnt=1; for(int i=1;i<=n;i++){ if(a[i].size()>=3){ for(int x:a[i]){ ans[x]=cnt; cnt++; } break; } } for(int i=1;i<n;i++){ if(ans[i])cout<<ans[i]-1<<'\n'; else cout<<cnt-1<<'\n',cnt++; } //puts(ans>0?"YES":"NO"); //puts(ans>0?"Yes":"No"); }
D. Ehab the Xorcist
首先考虑一些特殊情况:1.v==0,u==0 答案为0 2.v<u 答案为-1 3.v==u 答案为u
接下来是就是思考构造思路 对于异或 a^a=0 所以如果将v分成{u,d,d}其中d=(v-u)/2 是符合的 反之 若(v-u)%2==1则不符合 因为几个数的异或与这几个数的和同奇偶性
所以可以知道数组长度最大为3
最后想一下长度为2的情况:u为1的位置a,b也一定为1 位数为0的位置 a,b不可能同时为1 因此让a可能不为1的地方全为0,即a = (v - u)/2 check一下a^b是否为u
#define int long long void solve(){ int u=read(),v=read(); if(u==0&&v==0){ cout<<"0\n"; return ; } if(v<u){ cout<<"-1\n"; return ; } if(u==v){ cout<<"1\n"; cout<<u<<'\n'; return ; } if(v==0){ cout<<"-1\n"; return ; } if((v-u)&1)cout<<"-1\n"; else{ int d=(v-u)/2; int p=(v+u)/2; if((d&u)==0){ cout<<2<<endl; cout<<d<<" "<<v-d<<'\n'; return ; } cout<<"3\n"; cout<<u<<" "<<d<<" "<<d<<'\n'; } //puts(ans>0?"YES":"NO"); //puts(ans>0?"Yes":"No"); }
标签:NO,int,void,628,Codeforces,read,ans,Div,YES From: https://www.cnblogs.com/edgrass/p/17320159.html