题目大意
戳我原题
总共进行两轮比赛,每一轮比赛每一个单位要和其他所有单位以位置为基础进行比较。
比较规则
1 位置差大于$1$,位置靠后的胜
2 位置差等于$1$,随机胜负
给定每个位置两轮胜场差的绝对值,问是否可能出现给定的胜负情况
解题思路
一共有$0,1,2$三种情况,我们需要调整上下两个$round$的比较关系来满足有合法序列。而我们可以发现,如果我们更改一个关系,会改变这个关系相连的两个数的值(一个$+1$,一个$-1$)。而又因为相差1同时包括($+1,-1$)两种情况,所以相当于我们一次可以把两个相邻的($1,1$)变成($0,0$)。同理,我们可以把($1,0$)变成($0,1$)(或者是($0,1$)改成($1,0$))
综上,我们从前往后扫一遍,只需满足所有的$1$都匹配即可。
解题代码
#include <cstdio>
using namespace std;
int main()
{
register int i,j;
int n;scanf("%d",&n);
int pre=0;
for (i=1;i<=n;i++)
{
int x;scanf("%d",&x);
if (x!=0)
{
if (x==1)
{
if (pre) pre=0;
else pre=x;
}
if (x==2)
{
if (!pre) {puts("NO"); return 0;}
}
}
}
if (pre!=0) puts("NO");else puts("YES");
}