当前位置:   article > 正文

Codeforces Round 948 (Div. 2)

codeforces round 948 (div. 2)

A. Little Nikita

题意:有n次机会,每次可以选择放一个方块或者拿走一个,问最后是否可以有m个方块

思路:如果n<m,显然不行。再看n>=m的情况,可以先假定放刚好m个,在思考是否可以在接下来的步骤使方块数不变。注意到当n-m为偶时可以,为奇时不行。

B. Binary Colouring

题意:构造题,懒得描述了,直接看,其中第三条可以转换成不存在连续的1或-1

思路:首先先将给定的x转换成2进制,通过观察可以得到一个性质,就是两个连续的1可以通过下下方法转成不连续:

代码:

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. int main() {
  5. std::ios::sync_with_stdio(false);
  6. std::cin.tie(0);
  7. int t;
  8. cin>>t;
  9. while(t--)
  10. {
  11. ll n,pre=0;
  12. cin>>n;
  13. vector<int>a;
  14. for(int i=0;(1<<i)<=n;i++)
  15. {
  16. if((n&(1<<i))==0)
  17. {
  18. a.push_back(0);
  19. }
  20. else
  21. {
  22. a.push_back(1);
  23. }
  24. }
  25. a.push_back(0);
  26. for(int i=1;i<a.size();i++)
  27. {
  28. if(a[i]==a[i-1]&&a[i]==1)
  29. {
  30. a[i-1]=-1;
  31. a[i+1]+=1;
  32. a[i]=0;
  33. }
  34. else if(a[i]==2)
  35. {
  36. a[i]=0;
  37. a[i+1]+=1;
  38. }
  39. }
  40. if((*(--a.end()))==0)
  41. a.pop_back();
  42. cout<<a.size()<<"\n";
  43. for(auto ed:a)
  44. {
  45. cout<<ed<<" ";
  46. }
  47. cout<<"\n";
  48. }
  49. }

C. Nikita and LCM

题意:给定一个数组,找到一个子数组,需使这个子数组的lcm(最小公倍数)不存在于给定的数组,问这个子数组的最大长度是多少

思路:对这个题目加以思考可以发现,如果直接从这个数组中挑选某些数出来判断这个数组的lcm是否存在于原数组中显然会超时。于是考虑枚举lcm,判断对于每个lcm有多少个数成立即可。

D. XORificator

题意:

思路:有个非常重要的性质,对于某一列,假设确定了这一列的哪一行有1,那么这个图已经可以确定了。所以我们可以暴力枚举每一个位置让它为1,然后得到这个图的答案,最后找到那个最大值即可。由于翻转是对于每行翻转,可以用哈希。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1003914
推荐阅读
相关标签
  

闽ICP备14008679号