比赛 国庆欢乐赛2 评测结果 EEEETTTTWWWWEEEEEEEE
题目名称 魔法卡片 最终得分 0
用户昵称 梦那边的美好AC 运行时间 11.342 s
代码语言 C++ 内存使用 3.53 MiB
提交时间 2025-10-04 11:13:46
显示代码纯文本
#include<iostream>
#include<cstring>
using namespace std;

const int MAXM = 10;
const int MAXN = 1000005;

int P[1 << MAXM];
int s[MAXN], t[MAXN];
int n, m, Q;

int main() {
	freopen("magic.in", "r", stdin);
	freopen("magic.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
	cin >> n >> m >> Q;
	for(int p = 0;p < (1 << m);p ++){
		int sum = 0;
		for(int j = 0;j < m;j ++){
			if(p & (1 << j)){
				sum += (j + 1) * (j + 1);
			}
		}
		P[p] = sum;
	}
	for(int i = 1;i <= n;i ++){
		int u; cin >> u;
		int p = 0;
		for(int j = 0;j < u;j ++){
			int x; cin >> x;
			p |= 1 << (x - 1);
		}
		s[i] = p; t[i] = ((1 << m) - 1) ^ p;
//		cout << s[i] << ' ' << t[i] << '\n';
	}

	while(Q --){
		int l, r; cin >> l >> r;
		int dp[1 << MAXM];
		memset(dp, 0, sizeof(dp));
		dp[s[l]] = 1;
		dp[t[l]] = 1;
		for(int k = l + 1;k <= r;k ++){
			int f[1 << MAXM];
			memset(f, 0, sizeof(0));
			for(int p = 0;p < (1 << m);p ++){
				if(dp[p]){
					f[p | s[k]] = 1;
					f[p | t[k]] = 1;
				}
			}
			for(int p = 0;p < (1 << m);p ++){
//			    cout << f[p] << ' ';
				dp[p] = f[p];
			}
//			cout << '\n';
		}
		int maxx = 0;
		for(int p = 0;p < (1 << m);p ++){
			if(dp[p] && P[p] > maxx){
				maxx = P[p];
			}
		}
		cout << maxx << '\n';
	}

	return 0;
}