AGC035 A - XOR Circle【分析】
题意简述:

(就是连环的意思)
唔,这道题考场上写了个什么神仙做法,数据太水了居然过了:
//
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define MAXN 10005
#define LL long long
#define INF 0x3f3f3f3f
int n,a,ans;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a);
ans^=a;
}
if(ans==) printf("Yes\n");
else printf("No\n");
return ;
}
反例还是很容易构造的吧,比如$n$不能被$3$整除的情况(看了下面的分析就可以轻而易举地举出好多反例来了)
分析:
1.左右两个数的异或值等于中间的数,那么任意相邻三个数的异或和一定为$0$
2.考虑一般情况,设序列的前$3$个数为$xyz$,且$x^y^z==0$,那么如果要满足任意三个相邻的数的异或和都为0,则下一个数只能为$x$,因为要满足$y^z^这个数==0$,依次推下去,可以发现$n%3==0$时,比如$xyzxyz$在连成环的情况下可以符合要求,反之不能,比如$xyzxy$。也就是这三个数的个数一定要是相等,且均为$n/3$
2.考虑特殊情况,上一种情况中的$xyz$中有2个数相等的时候,剩下那一个数只能为$0$,也就是$0$的个数为$n/3$,另一个数的个数为$n/3*2$。
3.最最特殊的情况,就是全部都是$0$的情况,这种情况不需要判断$n%3==0$。
但是,
做这道题的时候该犯的错误,不该犯的错误都犯到位了。
1.没有开ll
2.多组数据不清零(线下考试的时候由于AT数据过于水,重造了数据,没有绑点,但是多组数据)
3.在找不一样的数的时候,用的下面的式子判断,但是,要记得赋$a[0]=-1或INF$,否则在第一个数是0的时候会炸掉。
//不开ll见祖宗
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
#define N 100005
#define ll long long
#define MOD 1000000007
#define INF 0x3f3f3f3f
int n;
ll a[N],num[];
int cnt[],tot;
int main()
{
//freopen("circle.in","r",stdin);
//freopen("circle.out","w",stdout);
int T;scanf("%d",&T);
while(T--)
{
//f**k多组数据不清零
tot=;
cnt[]=cnt[]=cnt[]=;
num[]=num[]=num[]=;
bool f=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
if(a[i]!=) f=;
}
if(f==)
{//全部都是0
puts("Yes");
continue;
}
sort(a+,a+n+);
a[]=INF;
for(int i=;i<=n;i++)
{
if(a[i]!=a[i-])
cnt[++tot]++,num[tot]=a[i];
else cnt[tot]++;
if(tot>)
{
puts("No");
f=;//混用变量
break;
}
}
if(f==) continue;
if(n%==)
{
if(tot==&&(num[]^num[]^num[])==&&cnt[]==n/&&cnt[]==n/&&cnt[]==n/)
{
puts("Yes");
continue;
}
if(tot==&&num[]==&&cnt[]==n/&&cnt[]==n/*)
{
puts("Yes");
continue;
}
}
puts("No");
}
return ;
}
Code
AGC035 A - XOR Circle【分析】的更多相关文章
- xor和gates的专杀脚本
前段时间的一次样本,需要给出专杀,应急中遇到的是linux中比较常见的两个家族gates和xor. 首先是xor的专杀脚本,xor样本查杀的时候需要注意的是样本的主进程和子进程相互保护(详见之前的xo ...
- 2115: [Wc2011] Xor
2115: [Wc2011] Xor 链接 分析: 对于图中的一个环,是可以从1到这个环,转一圈然后在回到1的,所以可以一开始走很多个环,然后在走一条1到n的路径. 那么可以求出所有的环,加入到线性基 ...
- 4269: 再见Xor
4269: 再见Xor 链接 分析: 和SGU 275唯一不同的就是需要求出次小值,那么异或出最大值的所有元素中,找到最小的,去除即可. 代码: #include<bits/stdc++.h&g ...
- AtCoder Grand Contest 035
Preface Atcoder的题都好劲啊,都是我做不动的计数与构造 就当锻炼自己的思维能力了(基本都是bzt教的) A - XOR Circle bzt说这题数据太水了只要判一下所有数异或值是否为\ ...
- AtCoder Grand Contest 035 简要题解
从这里开始 题目目录 Problem A XOR Circle 你发现,权值的循环节为 $a_0, a_1, a_0\oplus a_1$,然后暴力即可. Code #include <bits ...
- AtCoder Beginner Contest 121 题解
题目链接:https://atcoder.jp/contests/abc121 A White Cells 分析:题目数据规模很小,直接暴力修改都可以.或者可以推出公式. 代码: #include & ...
- Codeforces 460D. Little Victor and Set
D. Little Victor and Set time limit per test:1 second memory limit per test:256 megabytes input:stan ...
- Django-C003-视图
此文章完成度[5%]留着以后忘记的回顾.多写多练多思考,我会努力写出有意思的demo,如果知识点有错误.误导,欢迎大家在评论处写下你的感想或者纠错. 在这个章节中,我们也一样需要练习过往已经掌握的技能 ...
- 【AtCoder】AtCoder Grand Contest 035 解题报告
点此进入比赛 \(A\):XOR Circle(点此看题面) 大致题意: 给你\(n\)个数,问是否能将它们摆成一个环,使得环上每个位置都是其相邻两个位置上值的异或值. 先不考虑\(0\),我们假设环 ...
随机推荐
- CSS选择器的权重与优先规
我们把特殊性分为4个等级,每个等级代表一类选择器,每个等级的值为其所代表的选择器的个数乘以这一等级的权值,最后把所有等级的值相加得出选择器的特殊值. 4个等级的定义如下: 第一等:代表内联样式,如: ...
- 利用rand7() 产生rand10()(腾讯)
题目1:已知rand7() 可以产生 1~7 的7个数(均匀概率),利用rand7() 产生rand10() 1~10(均匀概率) int rand10() { int temp; int te ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、jinfo、jconsole使用详解
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat等小巧的工具,本博客希望能起抛砖引玉之用,让 ...
- 任务Task、先后任务
Task类似后台线程. using System; using System.Threading; using System.Threading.Tasks;//引用命名空间 namespace Co ...
- 51 Nod 数字1的数量
1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的 ...
- 一些简单题(2)(Source : NOIP历年试题+杂题)
P3084 [USACO13OPEN]照片Photo 给出$m$个区间$[l_i,r_i]$覆盖$S=[1,n]$,试确定最大特殊点的数使得这每一个区间覆盖且仅覆盖一个特殊点. 如果无解,输出$-1$ ...
- 配置zookeeper开机自启动
第一种.修改vim /etc/rc.local文件 vim /etc/rc.local 加入: export JAVA_HOME=/usr/local/JAVA/ --JDK安装路径/data/zoo ...
- C++入门经典-例6.3-字符串之未使用字符串结束符“\0”和使用字符串结束符“\0”的区别
1:为字符串数组赋值的方式有两种,即数组元素逐一赋值和使用聚合方式赋值. 为数组元素逐一赋值.例如: pWord[0]='H'; 使用聚合方式赋值如: char pWord[]={'H','E','L ...
- assertion的用法
一.assertion的语法和语义 在软件开发中,assertion是一种经典的调试.测试方式,本文将深入解析assertion功能的使用以及其设计理念,并给出相关的例子. 清软国际java学 ...
- 异步上传&预览图片-压缩图片
移动端普及的时代,流量是用户最关心的,手机拍出来的照片基本上都在1~2M以上,这样上传会非常耗流量,影响用户体验,此例能在保证清晰度的情况下,将4.5M的图片压缩为30K <!DOCTYPE h ...