记录编号 578003 评测结果 AAAAAAAAAA
题目名称 3720.01数列 最终得分 100
用户昵称 栖云渡 是否通过 通过
代码语言 C++ 运行时间 0.057 s
提交时间 2023-01-08 18:13:00 内存使用 2.87 MiB
显示代码纯文本
#include<iostream>
using namespace std;
#define ll long long
const ll mod=1e9+7;
ll jx(int n);          // n!
ll nCm(ll n,ll m);    // nCm mod
ll kpw(ll a,ll n);   // a^n mod
int N;
bool b[1001];
int t=0;
int main()
{
	freopen("01.in","r",stdin);
	freopen("01.out","w",stdout);
	
	cin>>N;
	for(int i=1;i<=N;++i)
	  cin>>b[i];
	  
	for(int i=1;i<=N;++i)
	  if(b[i]==0) t++;
	  
	ll ans=0;
	
	for(int i=0;i<=N;++i)
	{
		ll temp=t*(N-i)+(N-t)*i;
		ans+=(nCm(N,i)*kpw(2,temp))%mod;	
	}	
	
	cout<<ans%mod;
		
	return 0;
}
ll jx(int n)
{
	if(n==0)
	  return 1;
	else
      return ((n%mod)*jx(n-1))%mod;
}
ll nCm(ll n,ll m)
{
	if(m==0||m==n)
	  return 1;
	  
	else                                   //Fermat小定理求逆元 
	{
		ll ni1=kpw(jx(m),mod-2)%mod;
		ll ni2=kpw(jx(n-m),mod-2)%mod;
	 	ll temp=(ni1*ni2)%mod;
	 	
		return (jx(n)*temp)%mod;
	}  
}
ll kpw(ll a,ll n)
{
	if(n==0)
      return 1;
	else
	{
		ll base=kpw(a,n/2)%mod;
		ll temp=base*base%mod;
		return (n%2==0?1:a)*temp%mod;	
	}
}