結果

問題 No.2094 Symmetry
ユーザー hokto
提出日時 2022-10-07 22:35:50
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 2,725 bytes
コンパイル時間 2,023 ms
コンパイル使用メモリ 209,476 KB
最終ジャッジ日時 2025-02-07 23:40:38
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 10 WA * 24
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
#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 second
template<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 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,N){
rep(j,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;
ll 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;
}
rep(i,2*N){
if(W.empty()||B.empty()) break;
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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0