http://acm.hdu.edu.cn/showproblem.php?pid=1210
第一遍编译出错。原来是next不能用,好恶心!!!
思路:记录某个点下一步要走向的点的位置放在mnext[]中。
然后让1按照规则走下去,直到1回到1点。走的步数就是步数。
#include<iostream>
using namespace std;
const int maxn=200005;
int temp[maxn];
int mnext[maxn];
int main(){
int n;
while(cin>>n){
for(int i=1;i<=2*n;i+=2){
temp[i]=n+(i+1)/2;
}
for(int i=2;i<=2*n;i+=2){
temp[i]=i/2;
}
// for(int i=1;i<=2*n;i++){
// cout<<temp[i]<<" ";
// }cout<<endl;
for(int i=1;i<=2*n;i++){
mnext[temp[i]]=i;
}
int m=1;int p=mnext[1];//指针
while(p!=1){
p=mnext[p];
m++;
}
cout<<m<<endl;
}
return 0;
}