C.CAT
题意:可以给无限个1到20的数,找n个数排列,满足不能有一样的数相邻,且一样的数中间最小的数不能大于这两个相邻的数。
1. #include<bits/stdc++.h>
2. using namespace std;
3. int main()
4. {
5. int n,i;
6. cin>>n;
7. int a[20];
8. for(i=1;i<=18;i++)
9. {
10. a[i]=pow(2,i);
11. }
12. int b[1000010];
13. int k;
14. for(i=1;i<=18;i++)
15. {
16. if(n<=a[i])
17. {
18. k=i+1;
19. break;
20. }
21. }
22. int t=k,s=0;
23. while(k--)
24. {
25. b[(int)pow(2,s++)]=k+1;
26. for(i=pow(2,s-1);i<=pow(2,t);i+=pow(2,s))
27. {
28. b[i]=k+1;
29. }
30. }
31. for(i=1;i<n;i++)
32. cout<<b[i]<<" ";
33. cout<<b[n]<<endl;
34. return 0;
35. }