我今年真的不想打铁了
https://codeforces.com/contest/2049/problem/C
这个题 我是优先队列过的 求和次数 最大
实际上 是一个结论题 很重要
if ((a + b + c) & 1) {cout << "-1\n";return;}if ((b + a) < c)cout << a + b << nl;elsecout << (a + b + c) / 2 ;
4 4 6 7次
4 3 5
3 3 4
3 2 3
2 2 2
1 1 2
1 0 1
0 0 0
https://codeforces.com/contest/1956/problem/C
这个题很有意思的
我一开始认为比如 n=3
我认为
1 2 3 1 1 3 1 2 3
1 2 3 ->2 2 3 -> 2 2 3
1 2 3 3 3 3 3 3 3
先把竖的小于等于n*(n+1)/2的都操作一次 然后再来一次第一行的
结果答案虽然相同 但是n=4就不同了 不信自己画下
实际上是
xxx xx1 xx1 x11 123 123
xxx xx2 123 123 123 223
123 123 123 133 133 333
就是一行一列这样操作就行
长这样 也有证明 不过懒得看了
https://codeforces.com/contest/1937/problem/C
交互题 很不错的交互题 是我的大脑旋转
看到3n我以为对于一个i最多操作三次 然后分析 > < =
无果
然后也不会做了 在我的印象里做交互都是靠猜的 这个显然不会做
碰到难的交互我就不会了
这个怎么想呢 其实是这样的 我们可以通过3个On的for循环去写这一道题
首先我们可以知道异或两个数 最大一定填满所有的1 这一点肯定的
然后关键是怎么找这两个数 这是难点 讲下雷根的做法
首先找到一个最高位的数字x 然后在找到和他|上可以等于1111的数字
再然后一个for循环找出这些数字最小的那个 为什么是最小
比如你的最高位x是10101
那这些数字可以是11111 11110 01111也可以是01010
最小的就是那个一定互补的 所以就ok啦 很有意思的一道交互题
int x=0;int y=0;for(int i=0;i<n;i++){cout<<"? "<<i<<" "<<i<<" "<<x<<" "<<x<<endl;char ch;cin>>ch;if(ch=='>')x=i;}set<int>s;for(int i=0;i<n;i++){cout<<"? "<<i<<" "<<x<<" "<<y<<" "<<x<<endl;char ch;cin>>ch;if(ch=='>'){s.clear();y=i;s.insert(i);}else if(ch=='=')s.insert(i); }for(auto i:s){cout<<"? "<<i<<" "<<i<<" "<<y<<" "<<y<<endl;char ch;cin>>ch;if(ch=='<'){y=i;}}cout<<"! "<<y<<" "<<x<<endl;
https://codeforces.com/contest/1935/problem/C