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可以通过下下方法转成不连续:

代码:

#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,然后得到这个图的答案,最后找到那个最大值即可。由于翻转是对于每行翻转,可以用哈希。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值