比赛 NOIP2023模拟赛2 评测结果 AAAAAEEEEEEEEEEA
题目名称 魔药 最终得分 38
用户昵称 小金 运行时间 1.931 s
代码语言 C++ 内存使用 3.88 MiB
提交时间 2023-11-14 12:45:58
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[25],s1=0,s0=0;
long long ans1=0,ans2=0;
void dfs(int x,int sy0,int sy1)
{
	if(x==n+1)
	{
		int t=1,p=a[1];
		for(int i=2;i<=n;i++)
		{
			if(a[i]!=p)
			{
				t++;
				p=a[i];
			}
		}
		if(t==1)
		{
			return;
		} 
		if(t==m)
		{
			ans1=(ans1+1)%1000000007;
		}
		else
		{
			ans2=(ans2+1)%1000000007;
		}
		return;
	}
	if(sy0>0)
	{
		a[x]=0;
		dfs(x+1,sy0-1,sy1);
	}
	if(sy1>0)
	{
		a[x]=1;
		dfs(x+1,sy0,sy1-1);
	}
}
int main()
{
	freopen("sleeping.in","r",stdin);
    freopen("sleeping.out","w",stdout);
	cin>>n>>m;
	string y;
	cin>>y;
	int l=y.length();
	for(int i=0;i<l;i++)
	{
		if(y[i]=='1')
		{
			s1++;
		}
		else
		{
			s0++;
		}
	}
	dfs(1,s0,s1);
	cout<<ans1<<' '<<ans2;
	return 0;
}