結果
問題 | No.2094 Symmetry |
ユーザー |
![]() |
提出日時 | 2022-10-07 22:28:09 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,747 bytes |
コンパイル時間 | 4,387 ms |
コンパイル使用メモリ | 261,004 KB |
最終ジャッジ日時 | 2025-02-07 23:35:28 |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 9 WA * 24 TLE * 1 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/all>#define rep(i,n) for(int i=0;i<(int)n;i++)#define Rep(i,h,t) for(int i=(int)h;i<(int)t;i++)#define Rrep(i,n) for(int i=(int)n;i>=0;i--)#define RRep(i,h,t) for(int i=(int)h;i>=(int)t;i--)#define UNIQ(v) v.erase(unique(v.begin(),v.end()),v.end());#define pb push_back#define Fi first#define Se secondtemplate<typename T>bool chmax(T& vmax,const T& v){if(vmax<v){vmax=v;return true;}return false;}template<typename T>bool chmin(T& vmin,const T& v){if(vmin>v){vmin=v;return true;}return false;}using namespace std;using namespace atcoder;using ll=long long;using lb=long double;using veci=vector<int>;using vec2i=vector<vector<int>>;using vecll=vector<ll>;using vec2ll=vector<vector<ll>>;using p2i=pair<int,int>;using p2ll=pair<ll,ll>;using m2i=map<int,int>;using m2ll=map<ll,ll>;using msi=map<string,int>;ll gcd(ll a,ll b){if(b==0){return a;}return gcd(b,a%b);}ll lcm(ll a,ll b){return ll(a/gcd(a,b))*b;}void yn_out(bool b,string yes_out="Yes",string no_out="No"){cout<<(b ? yes_out : no_out)<<endl;}ll ceilll(ll a,ll b){return (a+b-1)/b;}const int MOD=1e9+7;//const int MOD=998244353;const int dirx[4]={1,0,-1,0};const int diry[4]={0,1,0,-1};bool is_symmetry(vector<string> S,int N){rep(i,2*N){rep(j,2*N){if(S[i][j]!=S[i][2*N-1-j]) {return false;}}}return true;}int main(){ios::sync_with_stdio(false);cin.tie(nullptr);//cout<<fixed<<setprecision(9);int N,K;cin>>N>>K;vector<string> S(2*N);rep(i,2*N){cin>>S[i];}// W:昇順 B:降順set<pair<ll,int>> W,B;vec2ll C(2*N,vecll(2*N));ll ans=-1e16;ll sum=0;rep(i,2*N){rep(j,2*N){cin>>C[i][j];if(S[i][j]=='.'){W.insert({-C[i][j],i*2*N+j});}else{B.insert({C[i][j],i*2*N+j});sum+=C[i][j];}}}if(is_symmetry(S,N)){ans=sum+K;}else{ans=sum;}while(!W.empty()&&!B.empty()){auto [w,wp]=*W.begin();auto [b,bp]=*B.begin();W.erase(W.begin());B.erase(B.begin());w*=-1;if(b>=w){break;}sum+=w-b;W.insert({-b,bp});B.insert({w,wp});swap(S[wp/(2*N)][wp%(2*N)],S[bp/(2*N)][bp%(2*N)]);if(is_symmetry(S,N)){chmax(ans,sum+K);}else{chmax(ans,sum);}}cout<<ans<<endl;return 0;}