?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
188153143 |
Practice: DaiRuiChen007 |
1682D - 65 | C++14 (GCC 6-32) | Accepted | 77 ms | 3344 KB | 2023-01-06 04:06:29 | 2023-01-06 04:06:29 |
// LUOGU_RID: 98793642 #include<bits/stdc++.h> using namespace std; const int MAXN=2e5+1; char deg[MAXN]; int p[MAXN],link[MAXN]; inline void solve() { int n,tot=0; scanf("%d%s",&n,deg+1); for(int i=1;i<=n;++i) tot+=deg[i]-'0',p[i]=i,link[i]=i-1; if(tot==0||tot%2==1) { puts("NO"); return ; } vector <int> fail; for(int i=1;i<=n;++i) { if(i==1||i==n) { if(deg[i]=='0') fail.push_back(i); } else { if(deg[i]=='1') fail.push_back(i); } } puts("YES"); for(int i=0;i<(int)fail.size();i+=2) { if(fail[i+1]==n) { printf("%d %d\n",link[n],n); link[n]=link[fail[i]]; link[fail[i]]=0; } else link[fail[i+1]+1]=fail[i]; } for(int i=1;i<=n;++i) if(link[i]>0) printf("%d %d\n",i,link[i]); } signed main() { int T; scanf("%d",&T); while(T--) solve(); return 0; }
?
?
?
?