Codeforces Round #310 (Div. 2)--B

http://codeforces.com/problemset/problem/556/B

题意:给定n个数字且都小于n,然后每次循环第2k+1个数字+1,第2k个数字减一,k=0,1,2...n/2.  问最后能不能使n个数字刚好为排列为0,1,2,....n-1.

题解:简单模拟就好了,循环次数设为n-1,因为n次循环后回到原来的排列。

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <ctime>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <set>
 8 #include <vector>
 9 #include <sstream>
10 #include <queue>
11 #include <typeinfo>
12 #include <fstream>
13 #include <map>
14 #include <stack>
15 using namespace std;
16 typedef long long ll;
17 const int maxn=1010;
18 int n,a[maxn];
19 int main()
20 {
21     scanf("%d",&n);
22     for(int i=0;i<n;i++)
23         scanf("%d",&a[i]);
24     int t=1,sum=0;
25     while(t<=n){
26         for(int i=0;i<n;i++){
27             if(a[i]==i) sum++;
28             if(i%2==0){
29                 if(a[i]==n-1) a[i]=0;
30                 else a[i]+=1;
31             }
32             else{
33                 if(a[i]==0) a[i]=n-1;
34                 else a[i]-=1;
35             }
36         }
37         if(sum==n) break;
38         else sum=0;
39         t++;
40     }
41     if(sum==n) printf("Yes
");
42     else printf("No
");
43     return 0;
44 }
原文地址:https://www.cnblogs.com/RRirring/p/4614448.html