15pts求调
查看原帖
15pts求调
477821
toolong114514楼主2024/4/20 21:31
#include<iostream>
using namespace std;
#define int long long
const int INF=0x3f3f3f3f3f3f3f3f;
const int N=1e5+10;
int f[N][50];
int num[N][50];
int n,c,ans=0;
void print(int x){
	for(int i=0;i<5;i++){
		if(x&(1<<i)) cout<<"1";
		else cout<<"0";
	}
	cout<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
	cin>>n>>c;
	while(c--){
		int e,f,l,lim1=0,lim2=0,tmp;
		cin>>e>>f>>l;
		while(f--){
			cin>>tmp;
			lim1|=(1<<((tmp-e+n)%n));
		}
		while(l--){
			cin>>tmp;
			lim2|=(1<<((tmp-e+n)%n));
		}
		//print(lim1);
		//print(lim2);
		for(int j=0;j<32;j++){
			if((~j&lim1)||(j&lim2)){
				num[e][j]++;
			}
		}
	}
//	for(int i=1;i<=n;i++){
//		for(int j=0;j<32;j++){
//			cout<<num[i][j]<<" ";
//		}
//		cout<<endl;
//	}
	for(int t=0;t<32;t++){
		for(int i=1;i<=n+1;i++){
			for(int j=0;j<32;j++){
				f[1][j]=-INF;
			}
		}
		f[1][t]=num[1][t];
		for(int i=2;i<=n+1;i++){
			for(int j=0;j<32;j++){
				int sb=j<<1;
				sb&=15;
				f[i][j]=max(f[i-1][sb^1],f[i-1][sb])+num[i][j];
			}
		}
		ans=max(ans,f[n+1][t]);
	}
	cout<<ans;
	return 0;
}
2024/4/20 21:31
加载中...