Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38009 LYLAKIOI 【S】T2 C++ 通过 100 288 MS 81716 KB 1729 2025-06-08 16:27:52

Tests(20/20):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,x,y,ans[1000005],f1[1005][1005],f2[1005][1005]; vector<int>E[1000005]; int id(int i,int j){return (i-1)*n+j;} int fa[1000005]; void dfs(int u){ for(int x:E[u]){ if(x!=fa[u])fa[x]=u,dfs(x); } } void dfs2(int u,int A,int B){ if((u+n-1)/n<A)return; ans[u]=((u+n-1)/n<B)?1:2; for(int x:E[u])if(!ans[x])dfs2(x,A,B); } void link(int x,int y){ E[x].p_b(y),E[y].p_b(x); } void slv(){ n=read(),x=read(),y=read(); up(i,1,n)up(j,1,n)f1[i][j]=read(); up(i,1,n)up(j,1,n)f2[i][j]=read(); up(i,2,n){ up(j,1,n){ if(!f1[i][j])link(id(i-1,j),id(i,j)); } } up(i,1,n){ up(j,2,n){ if(!f2[i][j])link(id(i,j-1),id(i,j)); } }dfs(id(1,x)); for(int p=id(n,y),lst=id(n+1,y),mn=n+1,mn2=n+1;p;mn=min(mn,(p+n-1)/n),lst=p,p=fa[p]){ ans[p]=1; if(mn<(p+n-1)/n)ans[p]=2; if(ans[p]==2)mn2=min(mn2,p); if(lst==p+n&&ans[p+n]!=2)continue; for(int x:E[p])if(!ans[x])dfs2(x,mn,min(mn2,(p+n-1)/n+1)); } up(i,1,n){ up(j,1,n)printf("%d ",ans[id(i,j)]);printf("\n"); } } int main(){ //freopen("maze.in","r",stdin),freopen("maze.out","w",stdout); slv(); return 0; }


测评信息: