トピックリンクします。http://oj.ecustacm.cn/problem.php ID = 1401?
具体的にコードの注意を見て:
書式#include <iostreamの> の#include <CStringの> の#include <ベクトル> の#include <キュー> の#include <アルゴリズム> 使用して名前空間をSTD。文字列行列[ 15 ]。 ベクター < チャー > CHS。 INT T、N、M、フラグ。ボイドInitData(){ ため(INT iは= 0 ; I < 15 ; I ++ ){ 行列[I] .clear(); } chs.clear()。 } int型のmain(){ ながら(〜のscanf(" %のD "& T)){ 一方(T-- ){ scanf関数(" %D%D "、&N、&M); フラグ = 真; のために(INT iが= 0 ; I <N; I ++ ){ CIN >> 行列[I]; } // 拿取包含的有哪些字符 ベクトル< チャー > ::イテレータそれは、 のために(INT iは= 0 ; I <Nを; I ++ ){ ため(INT J = 0 ; J <行列[I] .size(); J ++ ){ IT = 探す(chs.begin()、chs.end()、行列[I] [J]); IF(CHS == ITを.END()&&フラグに){ // 前の文字まで添加し、真でない(最初の文字からなる矩形の左上隅) chs.push_back(行列[I] [J]); // 最初の取得文字 // 決意を起動し、右の拡張アプリケーション開始 // メイン判定する文字矩形構成のすべての文字かどうか int型のW、H; W = H = 1 ; INT I1 = I、J1 = J; // へW幅を決定右拡張アプリケーション、 しばらく(++ J1 <&&行列M [I] [J1] ==行列[I] [J]){W ++ ;} // 下方延長アプリケーション、H高さを決定する 一方で(I1 ++ <N &&行列[I1] [J] ==行列[I] [J]){H ++ ;} // 高さを取得し、矩形内の他の文字があるかどうか検索を開始する ためには、(I = I1、I1 <I + H、I1 ++ ){ 用( J = J1、J1 <J + W; J1 ++ ){ IF(行列[I] [J] =!行列[I1] [J1]){ でフラグ = falseに、 BREAK ; } } IF(内のフラグ!)BREAK ; } IF(!内のフラグ)BREAK ; // この文字の外側の検索矩形の存在がある場合 のために(INT I2 = 0 ; I2 <N; I2 ++ ){ ため(INT J2 = 0 ; J2 <行列[I2は] .size(); J2 ++ ){ IF){((I2> = I && I2 <I + H && J2> && J2 = J <J + W!)// 負矩形 IF(行列[I] [J ] == 行列[I2] [J2]){ でフラグ = falseに; 休憩; } } } もし(!フラグ)ブレーク。 } } もし(!フラグ)ブレーク。 } } もし(フラグ){ COUT << " YES " << ENDL。 } 他{ COUT << " NO " << ENDL。 } InitData()。 } } 戻り 0 。 }
..............