step4_演算法_ACM遞推與組合 HDU1210 Eddy's 洗牌問題【遞推函式+模擬】
阿新 • • 發佈:2019-01-30
第一遍編譯出錯。原來是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; }