Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
30326 baka24 【S】T1 C++ 解答错误 20 50 MS 26952 KB 2150 2024-06-23 18:24:15

Tests(7/10):


#include<bits/stdc++.h> using namespace std; #define pb push_back inline int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}x=c-'0';c=getchar();while(c<='9'&&c>='0'){x*=10;x+=c-'0';c=getchar();}return x*f;} const int MAXN=200010; int n,m,b,p; char c[MAXN*5]; struct Edge{int id,v; bool operator<(const Edge&G)const{ return id<G.id; } }; vector<Edge>G[MAXN]; int cd[MAXN],rd[MAXN]; void add_side(int u,int v,int id){G[u].pb({id,v}),cd[u]++,rd[v]++;} int cur[MAXN],vis[MAXN]; stack<int>st; void dfs(int u){ for(int i=cur[u]+1;i<G[u].size();i=cur[u]+1){ int v=G[u][i].v,id=G[u][i].id; cur[u]=i; dfs(v); st.push(id); } } int ol(){ int cnt=0,bg=-1,ed=-1; for(int i=0;i<m;i++){ cur[i]=-1; if(cd[i]>rd[i]){ if(cd[i]-rd[i]!=1)return -1; if(~bg)return -1; bg=i; } else if(cd[i]<rd[i]){ if(rd[i]-cd[i]!=1)return -1; if(~ed)return -1; ed=i; } } if(bg==-1)bg=b; if(bg!=b)return -1; dfs(bg); return 0; } void slv(){ n=read(),m=read(),b=read(); for(int i=1;i<=n;i++){ scanf("%s",c+1); p=strlen(c+1); int u=0,v=0; for(int j=1;j<=p;j++){ if(c[j]=='1')break; u++; } int lst1=0; for(int j=1;j<=p;j++){ if(c[j]=='1'){ if(lst1)if((j-lst1)%m!=m-1){ printf("-1"); return; } lst1=j; } } for(int j=p;j;j--){ if(c[j]=='1')break; v++; } // cout<<" "<<p<<" "<<u<<" "<<v<<endl; u%=m,v%=m; add_side(u,(m-v-1)%m,i); } for(int i=0;i<b;i++)sort(G[i].begin(),G[i].end()),cur[i]=-1; if(ol()==-1||st.size()!=n)printf("-1"); else{ while(!st.empty()){ printf("%d ",st.top()); st.pop(); } } } signed main(){ slv(); return 0; }


测评信息: