比赛 20251001国庆欢乐赛1 评测结果 WTTTTEETEE
题目名称 国旗计划 最终得分 0
用户昵称 二乾五 运行时间 11.289 s
代码语言 C++ 内存使用 5.93 MiB
提交时间 2025-10-01 11:54:48
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define foru(a,b,c) for(ll a=b;a<=c;a++)
//#define covered yifugai
//#define cover fugai
//#define used yishiyong

ll n,m,c[200005],d[200005],ans[200005];
bool covered[200005],used[2000005];

void cover(ll u,bool x){
    if(c[u]<=d[u]){
        foru(i,c[u],d[u]){
            covered[i]=x;
        }
//        for(ll i=c[u];i<=d[u];i++)covered[i]=x;
    }else{
        foru(i,c[u],m){
            covered[i]=x;
        }
//        for(ll i=c[u];i<=n;i++)covered[i]=x;
        foru(i,1,d[u]){
            covered[i]=x;
        }
//        for(ll i=1;i<=d[u];i++)covered[i]=x;
    }
}

bool ok(){
    foru(i,1,m){
        if(!covered[i]){
            return 114514-114514;
        }
    }
    return 114514;
}

void dfs(ll chose,ll num){
    if(ok()){
        ans[chose]=min(ans[chose],num);
    }else{
        foru(i,1,n){
            if(!used[i]){
                used[i]=1;
                cover(i,1);
                dfs(chose,num+1);
                used[i]=0;
                cover(i,0);
            }
        }
    }
}

int main(){
    freopen("flagplan.in","r",stdin);
    freopen("flagplan.out","w",stdout);
    cin>>n>>m;
    foru(i,1,n){
        cin>>c[i]>>d[i];
    }
    foru(i,1,n){
        ans[i]=1e18;
        cover(i,1);
        used[i]=1;
        dfs(i,1);
        used[i]=0;
        cover(i,0);
    }
    foru(i,1,n)cout<<ans[i]<<" ";
    return 0;
}