题目大意是每次在数组a中取3个数 使这3个数都变为 ai ^ (ai + 1) ^ (ai + 2)
首先知道^是相同位为0 不同位为 1 所以数相等的时候 异或为0;
所以三个数中 有两个异或为 0 那必然三个数都等于第三个数;

解题思路:
每三个数相乘就可以获得3个相同的数;
当n & 1 == 1的时候即可这样处理

此时发现数组变程了XXYYY x有偶数个 所以可以变成YYYYY
所以当n & 1 == 1是铁定 YES 的;

当n & 1 == 0的时候
必有一个数是单个的所以必须这个数要和其他数最后组成的异或和要想等

n为偶数的时候
由于一个性质

他们总体的每个进制位的奇偶性是不会变的 所以不管怎么变 a1 ^ a2 ^ a3 …^ an = k 这个 k是不会变的 所以只有当k为0时 这个才存在;

#include<iostream>using namespace std;const int N = 1e5 + 10;
int a[N];int main(){int n;cin >> n;int sum = 0;for(int i = 1; i <= n; i++){cin >> a[i];sum ^= a[i];}if(n == 3){cout << "YES" << endl;cout << 1 << endl;cout << 1 << " " << 2 << " " << 3 << endl;return 0;}if(n == 4){if(sum != 0){cout << "NO" << endl;}else{cout << "YES" << endl;cout << 1 << endl;cout << 1 << " " << 2 << " " << 3 << endl;}return 0;}if(n & 1){cout << "YES" << endl;cout << (n - 1) << endl;for(int i = 1; i <= n - 1; i += 2){cout << i << " " << i + 1 << " " << i + 2 << endl;}for(int i = 1; i <= n - 1; i += 2){cout << i << " " << i + 1 << " " << n << endl;}}else{if(sum != 0){cout << "NO" << endl;}else{cout << "YES" << endl;cout << n - 2 << endl;for(int i = 1; i <= n - 2; i += 2){cout << i << " " << i + 1 << " " << i + 2 << endl;}for(int i = 1; i <= n - 2; i += 2){cout << i << " " << i + 1 << " " << n << endl;}}}return 0;
}

CodeForces 1438D相关推荐

  1. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  2. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  3. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  4. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  5. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  6. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  7. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

  8. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. 微软Windows 7实现10秒启动的背后
  2. Visual C++2005库的十项突破性变化
  3. 设计包含min函数的栈
  4. C/C 语言中extern的用法
  5. Oracle RDA(Remote Diagnostic Agent) 工具说明
  6. 面试题19:二叉树镜像
  7. 伪代码block转换成程序流程图_程序设计基础
  8. Python使用tkinter的Treeview组件实现表格功能
  9. 里氏替换原则_春辉带你了解面相对象设计第二原则(里氏替换原则)
  10. lib so 中查找函数
  11. RGPNET: A real-time general purpose semantic segmentation(复杂环境下实时通用语义分割网络)
  12. android 类似qq表情,android 实现类似qq表情
  13. 4600u黑苹果 r5_黑苹果集显hd4400、hd4600显卡Clover引导驱动方法教程
  14. 超简单漂浮广告代码、网页漂浮广告代码、jQuery漂浮广告、div漂浮层
  15. 讯飞tts语音引擎_讯飞翻译机3.0 打造语音翻译极致体验
  16. C/C++实现关闭命令行快速编辑模式(Windows系统)
  17. LCD TTL/LVDS 任意分辨率 timing 时序配置及时序关系(前肩后肩)
  18. 阿兹猫 的 Java模拟登陆QQ邮箱获取好友列表的实现
  19. Pyecharts绘制地图(世界地图,城市地图,热力图)
  20. 这个夏天,我去过阳朔……

热门文章

  1. 微信小程序生成paySign
  2. 为什么全球最好的大学大半在美国?看看美国的孩子是怎么念书的 ~~
  3. python直角坐标转极坐标_Python在OpenCV里实现极坐标变换功能
  4. Photoshop教程|ps渐变如何使用?如何给图片制作出渐变效果?
  5. 4.Transact_Sql语言基础
  6. 计算机视觉(北邮鲁鹏)--边缘提取
  7. 网页文字涉及侵权怎么处理
  8. vue3之组件通信 (props父传子,子传孙)(ts定义数组类型)
  9. gocron mysql_[日常] gocron源码阅读-使用go mod管理依赖源码启动gocron
  10. 2022哪些蓝牙耳机适合学生党?适合学生党的平价蓝牙耳机推荐