比赛 |
20241128 |
评测结果 |
TTTTEWWETTTTTTTTTTTT |
题目名称 |
魔法卡片 |
最终得分 |
0 |
用户昵称 |
黄天乐 |
运行时间 |
32.477 s |
代码语言 |
C++ |
内存使用 |
3.40 MiB |
提交时间 |
2024-11-28 10:04:12 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e4+5;
int n,m,q;
int num[MAXN],a[MAXN],b[MAXN];
int vis[MAXN];
int ans;
int lowbit(int x){
return x&-x;
}
void dfs(int cnt,int l,int r){
if(cnt==r+1){
int sum=0,x=0;
for(int i=l;i<=r;i++){
if(vis[i]==1)x|=a[i];
else x|=b[i];
}
for(int t=x;t;t-=lowbit(t)){
int v=lowbit(t);
int k=0;
while(v>0){
k++;
v>>=1;
}
sum+=k*k;
}
ans=max(ans,sum);
return ;
}
for(int i=1;i<=2;i++){
vis[cnt]=i;
dfs(cnt+1,l,r);
vis[cnt]=0;
}
}
int main(){
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>num[i];
for(int j=1;j<=num[i];j++){
int x;
cin>>x;
a[i]+=(1<<(x-1));
}
b[i]=(a[i]^((1<<m)-1));
}
for(int i=1;i<=q;i++){
memset(vis,0,sizeof(vis));
int l,r;
cin>>l>>r;
ans=0;
dfs(l,l,r);
cout<<ans<<endl;
}
return 0;
}