結果
問題 | No.1328 alligachi-problem |
ユーザー | 沙耶花 |
提出日時 | 2020-11-25 22:31:40 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 142 ms / 2,000 ms |
コード長 | 2,686 bytes |
コンパイル時間 | 8,002 ms |
コンパイル使用メモリ | 337,892 KB |
実行使用メモリ | 38,696 KB |
最終ジャッジ日時 | 2024-09-19 04:53:49 |
合計ジャッジ時間 | 13,623 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 1 ms
5,376 KB |
testcase_04 | AC | 3 ms
5,376 KB |
testcase_05 | AC | 3 ms
5,376 KB |
testcase_06 | AC | 3 ms
5,376 KB |
testcase_07 | AC | 4 ms
5,376 KB |
testcase_08 | AC | 1 ms
5,376 KB |
testcase_09 | AC | 138 ms
38,512 KB |
testcase_10 | AC | 47 ms
13,420 KB |
testcase_11 | AC | 137 ms
38,636 KB |
testcase_12 | AC | 138 ms
38,508 KB |
testcase_13 | AC | 142 ms
38,508 KB |
testcase_14 | AC | 134 ms
38,696 KB |
testcase_15 | AC | 48 ms
13,548 KB |
testcase_16 | AC | 134 ms
38,508 KB |
testcase_17 | AC | 133 ms
38,596 KB |
testcase_18 | AC | 141 ms
38,636 KB |
testcase_19 | AC | 138 ms
38,460 KB |
testcase_20 | AC | 140 ms
38,624 KB |
testcase_21 | AC | 142 ms
38,648 KB |
testcase_22 | AC | 136 ms
38,496 KB |
testcase_23 | AC | 50 ms
13,392 KB |
testcase_24 | AC | 64 ms
24,300 KB |
testcase_25 | AC | 68 ms
24,272 KB |
testcase_26 | AC | 103 ms
36,968 KB |
testcase_27 | AC | 98 ms
36,972 KB |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include "testlib.h" using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define modulo 998244353 #define mod(mod_x) ((((long long)mod_x+modulo))%modulo) #define Inf 1000000000 void NG(){ cout<<"No"<<endl; exit(0); } vector<int> topological_sort(vector<vector<int>> E){ int N = E.size(); vector<int> d(N,0); rep(i,N){ rep(j,E[i].size()){ d[E[i][j]]++; } } queue<int> Q; rep(i,N){ if(d[i]==0)Q.push(i); } vector<int> ret; while(Q.size()>0){ int u = Q.front(); Q.pop(); ret.push_back(u); rep(i,E[u].size()){ int v = E[u][i]; d[v]--; if(d[v]==0)Q.push(v); } } if(ret.size()!=N)ret.resize(0); return ret; } int main(){ //for test /* int N; cin>>N; vector<char> C(N),X(N); vector<int> Y(N); rep(i,N)cin>>C[i]>>X[i]>>Y[i]; */ //for validation registerValidation(); int N; N = inf.readInt(1,200000); inf.readEoln(); vector<char> C(N),X(N); vector<int> Y(N); rep(i,N){ C[i] = inf.readChar(); inf.readSpace(); X[i] = inf.readChar(); inf.readSpace(); Y[i] = inf.readInt(0,N-1); inf.readEoln(); assert(C[i]=='R'||C[i]=='B'); assert(X[i]=='R'||X[i]=='B'); } inf.readEof(); deque<int> B,R; rep(i,N){ if(C[i]=='B')B.push_back(-1); else R.push_back(-1); } rep(i,N){ if(C[i]==X[i]){ int t = Y[i]; if(C[i]=='R')swap(B,R); if(t>=B.size())NG(); if(B[t]!=-1)NG(); B[t] = i; if(C[i]=='R')swap(B,R); } } vector<pair<int,int>> pB,pR; rep(i,N){ if(C[i]==X[i])continue; if(C[i]=='B')pB.emplace_back(Y[i],i); else pR.emplace_back(Y[i],i); } sort(pB.begin(),pB.end()); sort(pR.begin(),pR.end()); int now = 0; rep(i,pB.size()){ while(B[now]!=-1)now++; B[now] = pB[i].second; } now = 0; rep(i,pR.size()){ while(R[now]!=-1)now++; R[now] = pR[i].second; } int n = B.size(),m = R.size(); vector<vector<int>> E(N,vector<int>()); rep(i,n-1){ E[i].push_back(i+1); } rep(i,m-1){ E[n+i].push_back(n+i+1); } rep(i,n){ int ind = B[i]; if(C[ind]==X[ind])continue; if(Y[ind]>m)NG(); if(Y[ind]!=0)E[n+Y[ind]-1].push_back(i); if(Y[ind]!=m)E[i].push_back(n+Y[ind]); } rep(i,m){ int ind = R[i]; if(C[ind]==X[ind])continue; if(Y[ind]>n)NG(); if(Y[ind]!=0)E[Y[ind]-1].push_back(n+i); if(Y[ind]!=n)E[n+i].push_back(Y[ind]); } vector<int> sorted = topological_sort(E); if(sorted.size()==0)NG(); vector<int> ans(N); rep(i,sorted.size()){ if(sorted[i]<n)ans[i] = B[sorted[i]]; else ans[i] = R[sorted[i]-n]; } cout<<"Yes"<<endl; rep(i,N){ if(i!=0)cout<<' '; cout<<ans[i]+1; } cout<<endl; return 0; }