赞
踩
A. Little Nikita
题意:有n次机会,每次可以选择放一个方块或者拿走一个,问最后是否可以有m个方块
思路:如果n<m,显然不行。再看n>=m的情况,可以先假定放刚好m个,在思考是否可以在接下来的步骤使方块数不变。注意到当n-m为偶时可以,为奇时不行。
B. Binary Colouring
题意:构造题,懒得描述了,直接看,其中第三条可以转换成不存在连续的1或-1
思路:首先先将给定的x转换成2进制,通过观察可以得到一个性质,就是两个连续的1可以通过下下方法转成不连续:
代码:
- #include <bits/stdc++.h>
- #define ll long long
-
- using namespace std;
-
- int main() {
- std::ios::sync_with_stdio(false);
- std::cin.tie(0);
- int t;
- cin>>t;
- while(t--)
- {
- ll n,pre=0;
- cin>>n;
- vector<int>a;
- for(int i=0;(1<<i)<=n;i++)
- {
- if((n&(1<<i))==0)
- {
- a.push_back(0);
- }
- else
- {
- a.push_back(1);
- }
- }
- a.push_back(0);
- for(int i=1;i<a.size();i++)
- {
- if(a[i]==a[i-1]&&a[i]==1)
- {
- a[i-1]=-1;
- a[i+1]+=1;
- a[i]=0;
- }
- else if(a[i]==2)
- {
- a[i]=0;
- a[i+1]+=1;
- }
- }
- if((*(--a.end()))==0)
- a.pop_back();
- cout<<a.size()<<"\n";
- for(auto ed:a)
- {
- cout<<ed<<" ";
- }
- cout<<"\n";
- }
- }
C. Nikita and LCM
题意:给定一个数组,找到一个子数组,需使这个子数组的lcm(最小公倍数)不存在于给定的数组,问这个子数组的最大长度是多少
思路:对这个题目加以思考可以发现,如果直接从这个数组中挑选某些数出来判断这个数组的lcm是否存在于原数组中显然会超时。于是考虑枚举lcm,判断对于每个lcm有多少个数成立即可。
D. XORificator
题意:
思路:有个非常重要的性质,对于某一列,假设确定了这一列的哪一行有1,那么这个图已经可以确定了。所以我们可以暴力枚举每一个位置让它为1,然后得到这个图的答案,最后找到那个最大值即可。由于翻转是对于每行翻转,可以用哈希。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。