wtcl
  • 板块学术版
  • 楼主Malody
  • 当前回复22
  • 已保存回复22
  • 发布时间2020/5/24 19:30
  • 上次更新2023/11/7 01:47:50
查看原帖
wtcl
334548
Malody楼主2020/5/24 19:30

在这场无数人AK的比赛中,本人自测250分,但不能平的是,我为什么要白白写二进制优化啊?你聪明的,告诉我,我的时间复杂度是多少。

#include<bits/stdc++.h>
using namespace std;
bitset<500010>f;
template<typename T>void read(T &cn)
{
 char c;int sig = 1;
 while(!isdigit(c = getchar())) if(c == '-') sig = -1; cn = c-48;
 while(isdigit(c = getchar())) cn = cn*10+c-48; cn*=sig;
}
int main()
{
	//freopen("watch.in","r",stdin);
	//freopen("watch.out","w",stdout);
	f[0]=1;
	int n,m;
	read(n);
	read(m);
	for(register int i=1;i<=n;++i)
	{
		int k,a;
		read(k);
		read(a);
		int t=1;
		while(a>=t)
		{
			int tt=500005-t*k;
			for(register int j=tt;j>=0;--j)
				if(f[j])
					f[j+t*k]=1;
			a-=t;
			t<<=1;
		}
	}
	for(register int i=1;i<=m;++i)
	{
		int t;
		read(t);
		if(f[t])
			puts("Yes");
		else
			puts("No");
	}
	return 0;
}
2020/5/24 19:30
加载中...