結果
| 問題 |
No.348 カゴメカゴメ
|
| コンテスト | |
| ユーザー |
WA_TLE
|
| 提出日時 | 2017-12-10 12:53:58 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 88 ms / 2,000 ms |
| コード長 | 2,854 bytes |
| コンパイル時間 | 1,388 ms |
| コンパイル使用メモリ | 135,680 KB |
| 最終ジャッジ日時 | 2025-01-05 05:07:32 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 53 |
ソースコード
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cmath>
#include<tuple>
#include<string>
#include<chrono>
#include<functional>
#include<iterator>
#include<random>
#include<unordered_set>
#include<unordered_map>
#include<array>
#include<map>
#include<bitset>
#include<iomanip>
using namespace std;
typedef long long int llint;
typedef long double lldo;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
//ios::sync_with_stdio(false);
//std::cin.tie(0);
//<< setprecision(20)
const int mod=1e9+7;
const llint big=1e15+100;
const long double pai=3.141592653589793238462643383279502884197;
const long double ena=2.71828182845904523536;
const long double eps=1e-7;
template <class T,class U>void mineq(T& a,U b){if(a>b){a=b;}}
template <class T,class U>void maxeq(T& a,U b){if(a<b){a=b;}}
template <class T> void soun(T& ar)
{sort(ar.begin(),ar.end());ar.erase(unique(ar.begin(),ar.end()),ar.end());}
llint gcd(llint a,llint b){if(a%b==0){return b;}else return gcd(b,a%b);}
llint lcm(llint a,llint b){return a/gcd(a,b)*b;}
vector<string>grd;
int n,m;
pair<int,int>solve(int iy,int ix){
queue<pair<int,int>>que;
que.push(mp(iy,ix));
queue<pair<int,int>>xx;
int ansU=0,ansN=0;
while(!que.empty()){
int y=que.front().fir;
int x=que.front().sec;
que.pop();
if(y<0||y>n+1||x<0||x>m+1){continue;}
if(grd[y][x]=='x'){
grd[y][x]='o';
xx.push(mp(y,x));
}
if(grd[y][x]!='.'){continue;}
grd[y][x]='+';
que.push(mp(y,x+1));
que.push(mp(y,x-1));
que.push(mp(y+1,x));
que.push(mp(y-1,x));
}
while(!xx.empty()){
int y=xx.front().fir;
int x=xx.front().sec;
if(y<0||y>n+1||x<0||x>m+1){continue;}
xx.pop();
if(grd[y][x]!='o'){continue;}
int itsiz=0;
queue<pair<int,int>>wa;
wa.push(mp(y,x));
int ny=-1;
int nx=-1;
while(!wa.empty()){
int wy=wa.front().fir;
int wx=wa.front().sec;
wa.pop();
if(wy<0||wy>n+1||wx<0||wx>m+1){continue;}
if(grd[wy][wx]=='.'){ny=wy;nx=wx;}
if(grd[wy][wx]!='o'){continue;}
grd[wy][wx]='H';
itsiz++;
wa.push(mp(wy-1,wx-1));
wa.push(mp(wy-1,wx));
wa.push(mp(wy-1,wx+1));
wa.push(mp(wy,wx-1));
wa.push(mp(wy,wx+1));
wa.push(mp(wy+1,wx-1));
wa.push(mp(wy+1,wx));
wa.push(mp(wy+1,wx+1));
}
pair<int,int>ret;
if(ny!=-1){ret=solve(ny,nx);}
ret.sec+=itsiz;
maxeq(ret.sec,ret.fir);
ansU+=ret.sec;
ansN+=ret.fir;
}
return mp(ansU,ansN);
}
int main(void){
int i,j;cin>>n>>m;
grd.res(n+2);
for(j=0;j<m+2;j++){
grd[0].pub('.');
grd[n+1].pub('.');
}
for(i=1;i<=n;i++){
string str;cin>>str;
str.insert(str.begin(),'.');
str.pub('.');
grd[i]=str;
}
cout<<solve(0,0).fir<<endl;
return 0;
}
WA_TLE