首页 题目

题目大意

戳我原题
总共进行两轮比赛,每一轮比赛每一个单位要和其他所有单位以位置为基础进行比较。
比较规则
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");
}



文章评论

目录