开始 2025-06-08 12:33:32

【2025noip】20250608模拟赛更正

结束 2025-06-30 00:00:00
Contest is over.
当前 2025-08-27 23:17:32

造福后人

给 T2 写的一个 gen,可以通过修改代码 34 行的 n=6 来改变 n 的值。

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
bool vis[N][N];
int dx[]={1,0,0,-1},dy[]={0,1,-1,0};
int a[N][N],b[N][N];
mt19937_64 rd(clock()^time(0));
int n;
bool chk(int x,int y){
    if(x<1||y<1||x>n||y>n||vis[x][y]) return 0;
    return 1;
}
int& gv(int x,int y,int dir){
    if(dir==0) return a[x+1][y];
    if(dir==1) return b[x][y+1];
    if(dir==2) return b[x][y];
    if(dir==3) return a[x][y];
}
int inc(int x,int y){
    return (x-1)*n+y;
}
int fa[N*N];
int fd(int x){
    if(x==fa[x]) return x;
    return fa[x]=fd(fa[x]);
}
bool mg(int x,int y){
    x=fd(x),y=fd(y);
    fa[x]=y;
    return (x!=y);
}
int main(){
    freopen("maze.in","w",stdout);
    n=6;
    int x=rd()%n+1,y=rd()%n+1;
    cout<<n<<' '<<x<<' '<<y<<endl;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            a[i][j]=(i!=1),b[i][j]=(j!=1);
        }
    }
    int all=n*n;
    for(int i=1;i<=all;i++) fa[i]=i;
    int blk=all;
    while(all!=1){
        int x=rd()%n+1,y=rd()%n+1,dir=rd()%4;
        int nx=x+dx[dir],ny=y+dy[dir];
        if(!chk(nx,ny)) continue;
        if(fd(inc(nx,ny))!=fd(inc(x,y))){
            gv(x,y,dir)=0;
            all-=mg(inc(x,y),inc(nx,ny));
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<a[i][j]<<' ';
        }cout<<endl;
    }cout<<endl;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<b[i][j]<<' ';
        }cout<<endl;
    }
}

SegTree  •  2个月前

比赛已结束。