AtCoder Beginner Contest 356

给定n个由1-n组成的序列,要求L到R这个区间内序列翻转,输出序列翻转之后的序列

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,a[N],l,r;
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>l>>r;
	int f=0;
	for(int i=1;i<l;i++)
	{
		if(f)cout<<" ";
		f=1;
		cout<<i;
	}
	for(int i=r;i>=l;i--)
	{
		if(f)cout<<" ";
		f=1;
		cout<<i;
	}
	for(int i=r+1;i<=n;i++)
	{
		if(f)cout<<" ";
		f=1;
		cout<<i;
	}
}

也是简单题,输入包含n个项以及m行,在第二行输入第i个是第i列应该达到的目标,之后m行每行n个,要求每一列相加的和大于对应的第i列。

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,a[N],b[N],ans[N];
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++)cin>>ans[i];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[j];
			b[j]+=a[j];
		}
	}
	for(int i=1;i<=m;i++)
	{
		if(b[i]<ans[i]){
			cout<<"No"<<endl;
			return 0;
		}
	}
	cout<<"Yes"<<endl;
}

题目大意是一共有n个钥匙,编号为1到n,需要k个真钥匙才能开门,然后给出了m个关系,也就是在某次尝试中用了这些钥匙开门,并且给了你是否开门的结果,问一共有多少种真钥匙的可能。

状态压缩。由于钥匙一共就15把,我们枚举每一把钥匙为真的可能性,一共就是2的15次方,只需要判断当前钥匙排列是否能通过这m种是否开门的尝试方案,全部通过则说明当前钥匙的组合是可能的,就把ans++。

代码找不到了。。。。。

题目大意是给定N和M,让1到N的每一个数和M作操作,统计操作之后二进制中的1的个数。

首先肯定是将m二进制化,m对应的位数为1,才会有操作出现1的可能

然后我们需要统计1到N中各个位上出现1的次数,只需要把前三位甚至前四位1出现的数字枚举一下就能发现规律

记得不要开unsigned long long,因为那个计数公式有可能出现负数的情况,开ULL到负数了会自动跳到最大值。

这个规律适用于1到64位,所以不需要特判1,当时没想到第一位也是这个规律,就想到奇数偶数了。

#include<bits/stdc++.h>
using namespace std;
#define int signed long long
const int N=1e4+10;
const int MOD=998244353; 
int n,m,a[N],b[N],num,ans;
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	num=0;
	while(m!=0)
	{
		num++;
		a[num]=m%2;
		m/=2;
	}
	if(a[1]==1)
	{
		ans=(ans+(n+1)/2)%MOD;
	}
	for(int i=2;i<=num;i++)
	{
		if(a[i]==1)
		{
			ans=(ans+n/(1LL<<i)*(1LL<<(i-1)))%MOD;
			int t=n%(1LL<<i)-((1LL<<(i-1))-1);
			if(t>0)ans=(ans+t%MOD)%MOD;
		}
	}
	cout<<ans%MOD<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值