Codeforces Round #525 (Div. 2)

Posted hermit-lei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #525 (Div. 2)相关的知识,希望对你有一定的参考价值。

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 }
View Code

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
";
26     return 0;
27 }
View Code

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
";
 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 }
View Code

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
");
 6     fflush(stdout);
 7     scanf("%d",&f);
 8     for(int i=29;i>=0;i--)
 9     {
10         printf("? %d %d
",a^(1<<i),b);
11         fflush(stdout);
12         scanf("%d",&x);
13         printf("? %d %d
",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
",a,b);
31     fflush(stdout);
32     return 0;
33 }
View Code

以上是关于Codeforces Round #525 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #525 (Div. 2)

Codeforces Round #525 (Div. 2)A. Ehab and another construction problem

Codeforces Round #525 E - Ehab and a component choosing problem

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)

Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)