Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不知道这样构造行不行 请求高人指点 WA#include <iostream> #include <string> int flag[100000],solution[100000]; using namespace std; int n; int cal(int m){ int cnt=m; int i; for(i=1;i<=n;i++){ if(flag[i]<i){ solution[1]=i; break; } } for(int j=n;j>i;j--){ if(flag[j]<j){ solution[cnt--]=j; if(cnt==1) return 1; } } return 0; } void print(int m){ for(int i=1;i<=m;i++){ if(i!=1) cout<<' '; cout<<solution[i]; flag[solution[i]]++; } cout<<endl; return ; } int main(){ int m; int ans=0; while(cin>>n&&n){ int total=(1+n)*n/2; if(total%2) { if(ans) cout<<endl; else ans=1; cout<<0<<endl; continue; } else{ memset(flag+1,0,sizeof(int)*n); if(ans) cout<<endl; else ans=1; cout<<n<<endl; if(n%2) m=n-1; else m=n; int cnt=0; while(cnt<total){ if(cal(m)){ print(m); cnt+=m; } else m-=2; if(m<2) break; } } } return 1; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator