結果
問題 |
No.2629 A replace B replace C
|
ユーザー |
|
提出日時 | 2024-02-17 00:10:45 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 25 ms / 2,000 ms |
コード長 | 1,046 bytes |
コンパイル時間 | 22,708 ms |
コンパイル使用メモリ | 356,940 KB |
最終ジャッジ日時 | 2025-02-19 15:12:15 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 61 |
ソースコード
#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #include<atcoder/all> using namespace std; using namespace atcoder; using ll=long long; using P=pair<ll,ll>; void IO(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); } int main(){ IO(); ll n; cin>>n; string s; cin>>s; string t; cin>>t; set<P> ab,bc; for(ll i=0;i<n;i++){ if(s[i]=='A'&&t[i]!='A'){ ab.insert(P(t[i]-s[i],i)); }else if(s[i]=='B'&&t[i]=='C'){ bc.insert(P(t[i]-s[i],i)); } } while(ab.size()&&bc.size()){ auto itr1=prev(ab.end()); auto itr2=prev(bc.end()); ll idx1=(*itr1).second; ll idx2=(*itr2).second; s[idx1]='B'; s[idx2]='C'; ab.erase(itr1); bc.erase(itr2); if(s[idx1]!=t[idx1]){ bc.insert(P(1,idx1)); } } bool ok=true; for(ll i=0;i<n;i++){ if(s[i]!=t[i]){ ok=false; } } if(ab.size()||bc.size()){ ok=false; } if(ok){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } }