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次循环后回到原来的排列。

 #include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
using namespace std;
typedef long long ll;
const int maxn=;
int n,a[maxn];
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d",&a[i]);
int t=,sum=;
while(t<=n){
for(int i=;i<n;i++){
if(a[i]==i) sum++;
if(i%==){
if(a[i]==n-) a[i]=;
else a[i]+=;
}
else{
if(a[i]==) a[i]=n-;
else a[i]-=;
}
}
if(sum==n) break;
else sum=;
t++;
}
if(sum==n) printf("Yes\n");
else printf("No\n");
return ;
}
上一篇:MySql的FIND_IN_SET()查询函数的使用


下一篇:2016年最好的15个Web设计和开发工具