Abundance of Codeforces
[by_041]
Codeforces Round #721 (Div. 2)
Codeforces Round #721 (Div. 2)
A. And Then There Were K
 The meaning of the question is to seek satisfaction[ n & ( n − 1 ) & ( n − 2 ) & ( n − 3 ) & . . . ( k ) = 0 n\&(n−1)\&(n−2)\&(n−3)\&...(k)=0 n&(n−1)&(n−2)&(n−3)&... (k) = 0] the maximum value of K required
 Bit operation → binary down processing
 If all the following bits are 0, k is 0 at the highest bit of n, and in this process, it must pass through a number with only this bit of 1( 2 x , x = f l o o r ( l o g 2 n ) 2^x,x=floor(log_2n) 2x,x=floor(log2 n)), so just output[ 2 x − 1 2^x1 2x − 1] will do
#include<bits/stdc++.h> using namespace std; int main() { int T,n,nn,i; bitset<10>num; cin>>T; while(~scanf("%d",&n)) { nn=1;i=n; while(i>>=1)nn<<=1; printf("%d\n",nn1); } return 0; }
B1. Palindrome Game (easy version)

The meaning of the question is to give a 01 string. Two operations can be performed at a time
 Spend 1dollar: convert a 0 to 1
 No cost: reverse the string, provided that the previous step is not reverse and the current string does not contain palindromes
A wise man is the first to win, and a wise man is the last to win
The string given by easy version is originally a palindrome

Obviously, game theory, first look at the previous experience:
 Game theory solution:
 Determine the winning situation of one party
 Add one step reversal
 Repeat 2 operations to get the game result of the given shape
 Realize the judgment of game results
 Game theory solution:

There are two cases for 0:
 cas1:... 0... ... 0... (symmetrical position is also 0)
 cas2:... 0... ... 1... (the symmetrical position is not 0) will not appear in the original string here

No 0: there must be a draw

For 0 with only cas1, there are two cases:

To deal with the general... 0... ... 0..., the current player must pay 1dollar
 When the other party reverse s, the other party will pay another dollar and return the same situation to the other party. Although the other party may have to pay at least another dollar in the next step (if there is, that is, when there is still 0), the other party earns (2dollar) for the last hand, so the other party will guide the last step to take place in the step of the other party
 Or, the other party pays 1dollar, leaving the same situation to the second party. In this way, the payment is equal, except for the case of cas1 without changing the operation
Thus, when the scene has only one or more pairs of 0's with asymmetric center, the first hand will lose 2dollar and the second hand will win

For the case where the center of symmetry is 0
 If Alice chooses to spend 1dollar to convert it into 0 in the first step, she will become the backhand of the previous case. In the previous case, A earns 21=1dollar, and A will win. In the absence of the previous case, A loses 1dollar, and B will win
 If A does not convert, because the original string is A palindrome string, it must convert A 0 to 1. Other options will only be worse


Because it is easy version, only the existence of cas1 needs to be considered, and the existence of cas2 needs to be considered in hard version
#include<iostream> using namespace std; int main() { int T,n,cas1,cas2,anss=0;//anss means is good to Alice char str[1007]; cin>>T; while(T) { scanf("%d",&n); getchar(); for(int i=0;i<n;i++) str[i]=getchar(); str[n]='\0'; // cout<<str<<endl; cas1=cas2=0; for(int i=0,m=(n+1)/21;i<=m;i++) { if(str[i]==str[ni1]) { if(str[i]=='0') { cas1+=2;//..0....0.. *2 } } else//B1 will no come to this { cas2++;//..1....0.. or ..0....1.. } } cas1=((n&1)&&(str[(n+1)/21]=='0')); // printf("cas1 = %2d ; cas2 = %2d ;\n",cas1,cas2); anss=(cas1&1?(cas1==1?1:1):(cas1==0?0:2)); if(cas2>0) { if(anss>=0) anss+=cas2; else anss=cas22+abs(anss); } if(anss) { if(anss>0) puts("ALICE"); else puts("BOB"); } else puts("DRAW"); } return 0; }
B2. Palindrome Game (hard version)

The meaning of the question is to give a 01 string. Two operations can be performed at a time
 Spend 1dollar: convert a 0 to 1
 No cost: reverse the string, provided that the previous step is not reverse and the current string does not contain palindromes
Alice takes the lead and Bob takes the lead. The string ends with 1. They are both wise men. Judge who is sure to win for the given situation
The string given by hard version is not necessarily palindrome

As above, there are two cases for 0:
 cas1:... 0... ... 0... (symmetrical position is also 0)
 cas2:... 0... ... 1... (the symmetrical position is not 0) will not appear in the original string here

No 0: there must be a draw

For 0 with only cas1, there are two cases:

To deal with the general... 0... ... 0..., the current player must pay 1dollar
 When the other party reverse s, the other party will pay another dollar and return the same situation to the other party. Although the other party may have to pay at least another dollar in the next step (if there is, that is, when there is still 0), the other party earns (2dollar) for the last hand, so the other party will guide the last step to take place in the step of the other party
 Or, the other party pays 1dollar, leaving the same situation to the second party. In this way, the payment is equal, except for the case of cas1 without changing the operation
Thus, when the scene has only one or more pairs of 0's with asymmetric center, the first hand will lose 2dollar and the second hand will win

For the case where the center of symmetry is 0
 If Alice chooses to spend 1dollar to convert it into 0 in the first step, she will become the backhand of the previous case. In the previous case, A earns 21=1dollar, and A will win. In the absence of the previous case, A loses 1dollar, and B will win
 If A does not convert, because the original string is A palindrome string, it must convert A 0 to 1. Other options will only be worse


In case of cas2:

Alice was so happy to see that the current situation was not a palindrome string that she immediately chose to reverse cas2 times in a row. Bob had to spend 1dollar twice to eliminate this situation, so that she could reason about the continuous loss state as soon as possible

To the last time
 If Alice gives up flipping the string and uses 1dollar to convert the last asymmetric 0 to 1, Bob will face the situation that there is only cas1 above
 If A continues to reverse, he will face only cas1
We can see that when there is only cas1, the first player will lose 2dollar, lose 1dollar and earn 1dollar. In order to make her own profit, Alice will give up the last flip when there is only cas1 left, otherwise she will not


According to the above analysis, we can calculate the final loss and profit of A (anss in the program below), and output it according to the positive and negative judgment results
#include<iostream> using namespace std; int main() { int T,n,cas1,cas2,anss=0;//anss means is good to Alice char str[1007]; cin>>T; while(T) { scanf("%d",&n); getchar(); for(int i=0;i<n;i++) str[i]=getchar(); str[n]='\0'; // cout<<str<<endl; cas1=cas2=0; for(int i=0,m=(n+1)/21;i<=m;i++) { if(str[i]==str[ni1]) { if(str[i]=='0') { cas1+=2;//..0....0.. *2 } } else { cas2++;//..1....0.. or ..0....1.. } } cas1=((n&1)&&(str[(n+1)/21]=='0')); // printf("cas1 = %2d ; cas2 = %2d ;\n",cas1,cas2); anss=(cas1&1?(cas1==1?1:1):(cas1==0?0:2)); if(cas2>0) { if(anss>=0) anss+=cas2; else anss=cas22+abs(anss); } if(anss) { if(anss>0) puts("ALICE"); else puts("BOB"); } else puts("DRAW"); } return 0; }
Codeforces Round #723 (Div. 2)
Codeforces Round #723 (Div. 2)
A. Mean Inequality
 The meaning of the title is to 2 n 2n 2n numbers are arranged in a ring, and one arrangement is required to make the adjacent three numbers unequal (no number is the average of the numbers on both sides)
 After sorting, the array is divided into two parts with a length of n (greater than the median and less than the median), which can be placed Cross (the large middle clip is small, and the small middle clip is large). Because the large average must be greater than the median, and the small average must be less than the median, this is certainly feasible
 Note that the allocated space of the initial array (before splitting) should have 2n elements
#include<bits/stdc++.h> using namespace std; int main() { int T,n,nn,a[55],b[55];//Space, 2n ah ah ah ah ah ah cin>>T; while(T) { scanf("%d",&n); nn=n*2; for(int i=0;i<nn;i++) scanf("%d",a+i); sort(a,a+nn); for(int i=0;i<n;i++) b[i]=a[i+n]; printf("%d %d",a[0],b[n1]); for(int i=1;i<n;i++) printf(" %d %d",a[i],b[ni1]); putchar('\n'); } return 0; }
B. I Hate 1111
 The meaning of the question is to give T numbers and judge whether each number can be divided into several { 11 , 111 , 1111 , 11111 , . . . } \{11,111,1111,11111,...\} {11,111,1111,11111,...} And
 because { 1111 , 11111 , . . . } \{1111,11111,...\} {1111,11111,...} Can be { 11 , 111 } \{11,111\} {11111} composition, so just look at whether it is divided by 11 after subtracting several 111
#include<bits/stdc++.h> using namespace std; //1111,11111,111111... Can be composed of 111 and 11, so just split into several 111 and 11 int main() { int T,n; cin>>T; while(T) { scanf("%d",&n); while(n>=0) { if(n%11==0) { puts("YES"); n=0; break; } n=111; } if(n) puts("NO"); } return 0; }