結果
問題 | No.402 最も海から遠い場所 |
ユーザー |
![]() |
提出日時 | 2017-01-28 14:27:44 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 383 ms / 3,000 ms |
コード長 | 2,453 bytes |
コンパイル時間 | 1,393 ms |
コンパイル使用メモリ | 116,672 KB |
実行使用メモリ | 135,720 KB |
最終ジャッジ日時 | 2024-12-23 20:56:13 |
合計ジャッジ時間 | 4,145 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
コンパイルメッセージ
main.cpp: In function ‘void solve()’: main.cpp:69:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 69 | scanf("%d%d",&H,&W); | ~~~~~^~~~~~~~~~~~~~ main.cpp:77:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 77 | scanf(" %s",str); | ~~~~~^~~~~~~~~~~
ソースコード
#ifdef __GNUC__#pragma GCC optimize ("O3")#pragma GCC target ("avx")#endif#define _USE_MATH_DEFINES#include <iostream>#include <iomanip>#include <stdio.h>#include <sstream>#include <algorithm>#include <cmath>#include <string>#include <cstring>#include <vector>#include <valarray>#include <array>#include <queue>#include <complex>#include <set>#include <map>#include <stack>#include <list>#include <cassert>//assert();#include <fstream>/////////#define REP(i, x, n) for(int i = x; i < n; i++)#define rep(i,n) REP(i,0,n)/////////typedef long long LL;typedef long double LD;typedef unsigned long long ULL;#define PII pair<int,int>/////////using namespace::std;// 最大公約数template<class T>inline T gcd(T a, T b){return b == 0 ? a : gcd(b, a % b);}// 最小公倍数template<class T>inline T lcm(T a, T b){return a * b / gcd(a, b);}//////////////////////////////////(x-r,y-r)-(x+r,y+r)//(2*r+1)**2bool kyori(vector<vector<int>>& wa,int h,int w,int x,int y,int r){if( x-r < 0 || y-r < 0 )return false;if( w <= x+r || h <= y+r )return false;int sum=0;sum = wa[y+r][x+r];int X,Y;X = x-r-1;Y = y-r-1;if( X >=0 && Y >= 0 ){sum += wa[Y][X];}if( X >= 0 ){sum -= wa[y+r][X];}if( Y >= 0 ){sum -= wa[Y][x+r];}return sum == (2*r+1)*(2*r+1);}inline void solve(){int H,W;scanf("%d%d",&H,&W);vector<vector<bool>> rikuFlag(H,vector<bool>(W,false) );vector<pair<int,int>> riku;pair<int,int> temp;char str[3001];for(int i=0;i<H;++i){scanf(" %s",str);for(int j=0;j<W;++j){if( str[j] == '#' ){rikuFlag[i][j] = true;temp.first = i;temp.second = j;riku.push_back( temp );}}}//累積和vector<vector<int>> wa(H,vector<int>(W,0));//w方向for(int h=0;h<H;++h){wa[h][0] = rikuFlag[h][0];for(int w=1;w<W;++w){wa[h][w] = wa[h][w-1] + rikuFlag[h][w];}}//h方向for(int w=0;w<W;++w){for(int h=1;h<H;++h){wa[h][w] += wa[h-1][w];}}//////////////////////////////int rikuSize = riku.size();int maxLen = 1;for(int i=0;i<rikuSize;++i){//riku[i].first secondwhile( kyori(wa,H,W,riku[i].second, riku[i].first,maxLen) == true ){++maxLen;}}printf("%d",maxLen);return;}int main(void){//std::cin.tie(0);//std::ios::sync_with_stdio(false);//std::cout << std::fixed;//小数を10進数表示//cout << setprecision(16);//小数をいっぱい表示する。16?solve();return 0;}