Educational Codeforces Round 94 (Rated for Div. 2) 题解

200 阅读1分钟

A

题目链接
暴力枚举所有二进制串,暴力匹配

#include<bits/stdc++.h>
#define rep(i,st,ed) for(int i=st;i<=ed;++i)
using namespace std;
const int N=53;
int a[3*N],ans[3*N];
int t,n,OK;
void dfs(int dep)
{
	if(OK==1)
		return;
	if(dep==n+1)
	{
		rep(i,1,n)
		{
			int flag=0;
			rep(j,1,n)
			{
				if(ans[j]==a[i+j-1])
				{
					flag=1;
					break;
				}
			}
			if(flag==0)
				return;
		}
		rep(i,1,n)
			cout<<ans[i];
		cout<<endl;
		OK=1;
		return;
	}
	ans[dep]=0;
	dfs(dep+1);
	ans[dep]=1;
	dfs(dep+1);
}
void solve()
{
	OK=0;
	cin>>n;
	string bs;
	cin>>bs;
	rep(i,0,bs.size()-1)
	{
		a[i+1]=bs[i]-'0';
	}
	dfs(1);
}
int main()
{
	cin>>t;
	while(t--)
	{
		solve();
	}
}

B

题目链接
假设物品A比物品B轻,且我拿走的A已知,那么我剩下的空间就要全部用来拿B,同伴应该尽量多地拿A(因为A轻,所以可以拿更多),有余力就拿B。只需要枚举我拿走多少A,就可以得到所有的方案,在其中取最大值即可。

#include<bits/stdc++.h>
#define rep(i,st,ed) for(int i=st;i<=ed;++i)
using namespace std;
int t,my,fol,na,nb,wa,wb,ans,c;
void solve()
{
	ans=0;
	cin>>my>>fol>>na>>nb>>wa>>wb;
	if(my>fol)
		swap(my,fol);//my is smaller
	if(wa>wb)
	{
		swap(na,nb);
		swap(wa,wb);//a is smaller
	}
	rep(a1,0,min(na,my/wa))
	{
		int b1=(my-a1*wa)/wb;
		int a2=min(na-a1,fol/wa);
		int b2=min(nb-b1,(fol-a2*wa)/wb);
		ans=max(ans,a1+a2+b1+b2);
	}
	cout<<ans<<endl;
}
int main()
{
	cin>>t;
	while(t--)
	{
		solve();
	}
}