1. 程式人生 > >step4_演算法_ACM遞推與組合 HDU1210 Eddy's 洗牌問題【遞推函式+模擬】

step4_演算法_ACM遞推與組合 HDU1210 Eddy's 洗牌問題【遞推函式+模擬】

第一遍編譯出錯。原來是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;
}