标签:EDA 不同 splay str 图片 name 注意 c++ not
A. Ehab and another construction problem
1不行 然后没了
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int x; 6 cin>>x; 7 if(x==1)cout<<x-2; 8 else cout<<x<<" "<<x; 9 return 0; 10 }
B. Ehab and subtraction
排序 找不同数字 相减就行 考虑下够不够k
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[100001]; 4 int b[100001]; 5 int main() 6 { 7 int n,k; 8 cin>>n>>k; 9 int i,j; 10 for(i=1;i<=n;i++) 11 { 12 cin>>a[i]; 13 } 14 sort(a+1,a+n+1); 15 j=1; 16 for(i=1;i<=n;i++) 17 if(a[i]!=a[i-1]) 18 { 19 b[j]=a[i]; 20 j++; 21 } 22 for(i=1;i<j&&i<=k;i++) 23 cout<<b[i]-b[i-1]<<endl; 24 for(i=j;i<=k;i++) 25 cout<<"0\n"; 26 return 0; 27 }
C. Ehab and a 2-operation task
想办法构造1,2,3,4,5......
然后一个显然的地方 模数大于前面i-1个数 那个2操作只对最后一个有影响 所以先把所有数加一个大数 然后取模构造就行了
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 int a[2001]; 5 int main(){ 6 cin>>n; 7 cout<<n+1<<endl; 8 cout<<"1 "<<n<<" 8000\n"; 9 for(int i=1;i<=n;i++) 10 { 11 cin>>a[i]; 12 cout<<"2 "<<i<<" "<<8000+a[i]-i<<endl; 13 } 14 return 0; 15 }
D. Ehab and another another xor problem
假如我们知道a和b后面x位的大小关系,并且前面的已经求出来了,那么考虑当前位。
如果是00 11那么他们和01,10取异或后结果必相反
如果是01 10那么他们和01,10取异或后结果必相同
所以就可以用两次异或求出首位是否相同 相同则讨论两次结果 都x+1位大小关系不变
如果不同 那么大的数此为为1 小的为0 x+1位大小关系就是跟01或10异或的结果
最后 注意输出fflush(stdout)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int a=0,b=0,f,x,y; 5 printf("? 0 0\n"); 6 fflush(stdout); 7 scanf("%d",&f); 8 for(int i=29;i>=0;i--) 9 { 10 printf("? %d %d\n",a^(1<<i),b); 11 fflush(stdout); 12 scanf("%d",&x); 13 printf("? %d %d\n",a,b^(1<<i)); 14 fflush(stdout); 15 scanf("%d",&y); 16 if(x==y) 17 { 18 if(f==1) 19 a^=(1<<i); 20 else 21 b^=(1<<i); 22 f=x; 23 } 24 else 25 { 26 if(x==-1) 27 a^=(1<<i),b^=(1<<i); 28 } 29 } 30 printf("! %d %d\n",a,b); 31 fflush(stdout); 32 return 0; 33 }
Codeforces Round #525 (Div. 2)
标签:EDA 不同 splay str 图片 name 注意 c++ not
原文地址:https://www.cnblogs.com/hermit-lei/p/10073413.html