CodeForces-556B Case of Fake Numbers

来源:互联网 发布:怎么看淘宝时间 编辑:程序博客网 时间:2024/05/21 18:58
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int  maxn = 1e3 + 5;int gear[maxn];int n;bool flag;int main(){    while(~scanf("%d", & n))    {        for(int i = 0; i < n; i ++)            scanf("%d", & gear[i]);        for(int i = 1; i <= n; i ++)        {            flag = true;            for(int j = 0; j < n; j ++)            {                if(gear[j] == j)                    continue;                else                {                    flag = false;                    break;                }            }            if(flag)                goto END;            for(int j = 0; j < n; j ++)            {                if(j % 2 == 0)                {                    gear[j] ++;                    if(gear[j] > n - 1)                        gear[j] = 0;                }                else                {                    gear[j] --;                    if(gear[j] < 0)                        gear[j] = n - 1;                }            }        }        END:        if(flag)            printf("YES\n");        else            printf("NO\n");    }    return 0;}

题意:第一行输入一个n。表示齿轮的数量。奇数下标齿轮顺时针转动,偶数下标齿轮逆时针转动。判断最后是否能能经过转动产生顺序数字012345.....可以输出Yes。

题解:改变数最多改变n次(第一个for循环),flag 判断是否找到。 第二个for循环 判断 是否符合题意01234....如果符合的话 可以直接goto跳出。如果不符合的话 就要继续变化。下标是从0开始的,所以偶数顺时针+1,奇数逆时针-1。如果顺时针+1超过n-1则变回0,如果逆时针-1小于0则变回n-1。

0 0