Codeforces Round #682 (Div. 2)部分题解

Problem A

就输出n个1个好了

Probem B

就看有没有相同的,因为从二进制的角度看的话,你要其他的加起来和这个相等,必须要有两个相等。

Problem C

乱搞样例你就会发现,和奇偶性有关,你维护奇偶性就好了。

Problem D

题意是给你一个序列,然后问你能不能通过三次异或三个项的方式来达到整个数列都一致的效果。那么我们先考虑朴素的只有三个值的情况,我们发现(aoplus aoplus b)的情况下,三个数可以变成一致,那么其核心思想就是凑出两个项相等,那么我们扩展一下,在三个数都不同的情况下,我们使用凑数的方法选择三组三个数来异或,就可以达到这个效果,那么我们发现奇数情况下只需要使用n-2次的凑配就可以达到效果,偶数的情况下看全部的异或和是否为0,不是的话就无解。

      #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int inf=0x3f3f3f3f;
typedef pair<int,int> PII;
void check_min (int &a,int b) {a=min (a,b);}
void check_max (int &a,int b) {a=max (a,b);}
int a[maxn];

int main () {
  int t=1;
  // scanf ("%d",&t);
  while (t--) {
    int n,sum=0; scanf ("%d",&n);
    for (int i=1;i<=n;i++) {
      scanf ("%d",&a[i]);
      sum^=a[i];
    }
    if (n%2==0) {
      if (sum) {
        printf ("NO
");
        return 0;
      }
      n--;
    }
    printf ("YES
%d
",n-2);
    for (int i=1;i<=n-2;i+=2) printf ("%d %d %d
",i,i+1,i+2);
    for (int i=1;i<=n-4;i+=2) printf ("%d %d %d
",i,i+1,n);
  }
  return 0;
}
原文地址:https://www.cnblogs.com/hhlya/p/13986178.html