当前位置:   article > 正文

Codeforces Round #508 (Div. 2) B. Non-Coprime Partition

b. non-coprime partition

题目大意:从1~n把这n个数分成两个集合,和为s1,s2,是否可以让这两个集合的gcd大于1(即不互质)

思路:稍加思考得知,只要不是1,2一定可以分成功,我是按照头尾相加的方式分的,类似等差数列的求和??

中间的一个或两个分一块,剩下的分一块,分一下奇偶就好啦

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<math.h>
  6. #include<queue>
  7. #include<string>
  8. #include<vector>
  9. #include<map>
  10. const int inf = 0x3f3f3f3f;
  11. using namespace std;
  12. const int N = 1e5+9;
  13. const int mod = 1e9+7;
  14. #define ll long long
  15. int n,k;
  16. int vis[29];
  17. int main()
  18. {
  19. //freopen("in.txt","r",stdin);
  20. scanf("%d",&n);
  21. if(n==1||n==2)
  22. {
  23. cout<<"No"<<endl;
  24. return 0;
  25. }
  26. cout<<"Yes"<<endl;
  27. if(n&1)
  28. { cout<<"1"<<" ";
  29. cout<<(n+1)/2<<endl;
  30. cout<<n-1;
  31. for(int i = 1; i<=n; i++)
  32. {
  33. if(i==(n+1)/2) continue;
  34. cout<<" "<<i;
  35. }
  36. cout<<endl;
  37. }
  38. else{
  39. cout<<2;
  40. cout<<" "<<n/2<<" "<<n/2+1<<endl;
  41. cout<<n-2;
  42. for(int i = 1; i<=n; i++)
  43. {
  44. if(i==n/2||i==(n/2+1)) continue;
  45. cout<<" "<<i;
  46. }
  47. cout<<endl;
  48. }
  49. return 0;
  50. }

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号