WA #10 玄2关 蒟蒻dp求调
查看原帖
WA #10 玄2关 蒟蒻dp求调
784614
yujiahaoa楼主2024/8/2 11:38
#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+5;
const int mod=1e9+7;
int primes[25]={2,3,5,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67};
int f[75][(1<<19)+5];
int n;
int cnt[75];
int m[N];
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int t;
		scanf("%d",&t);
		cnt[t]++;
	}
	
	m[0]=1;
	f[0][0]=1;
	for(int i=1;i<=n;i++)
	{
		m[i]=(m[i-1]<<1)%mod;
		//cout<<m[i]<<' ';
	}
	//cout<<endl;
	
	for(int i=1;i<=70;i++)
	{
		if(cnt[i]==0) 
		{
			for(int msk=0;msk<=(1<<19)-1;msk++)
			{
				f[i][msk]=f[i-1][msk];
			}
			continue;
		}
		for(int msk=0;msk<=(1<<19)-1;msk++)
		{
			int msk1=msk;
			int tmp=i;
			for(int j=0;j<19 && tmp>=primes[j];j++)
			{
				while(tmp%primes[j]==0)
				{
					tmp/=primes[j];
					msk1^=(1<<j);
				}
			}
			f[i][msk1]+=(1ll*f[i-1][msk]*m[cnt[i]-1]%mod)%mod;
			f[i][msk1]%=mod;
			f[i][msk]+=(1ll*f[i-1][msk]*m[cnt[i]-1]%mod)%mod;
		 	f[i][msk]%=mod;
		 	
		}
		//cout<<f[i][0]<<" ";
	}
	cout<<(f[70][0]+mod)%mod-1;
	return 0;
}


2024/8/2 11:38
加载中...