比赛 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;
}