:タイトル
データベース内のデータは、データの冗長性現象があるかどうかを検出します。すなわち、データの繰り返しの2つの以上の列があるかどうか
上記の図では、第二の列2行目と3行目を繰り返し、私たちは、データの冗長性が決定されます。彼は次の2つの表に分けることができますので、
(A)サンプル入力
3 3 どのように競争するためにピーター@ neerc.ifmo.ru、ACM ICPC、ピーター・ ACM ICPC、マイケル、マイケル@ neerc.ifmo.ruの勝つためにどのように ノートをからマイケル@ neerc.ifmo.ru ACM ICPCのチャンピオン、マイケル、 2 3 1 、ピーター、ピーター@ neerc.ifmo.ru 2、マイケル、マイケル@ neerc.ifmo.ru
(B)サンプル出力
NO 2 データ冗長性は3 @二列に発生していない 2 以上の二列の両方に表示される3 //冗長列 YES
2:コードの実装
#define _CRT_SECURE_NO_WARNINGS の#include <iostreamの> する#include < ストリング > の#include <sstream提供> の#include < 設定 > の#include <地図> の#include <ベクトル> の#include <アルゴリズム> 使用して名前空間STD。 ベクター < ストリング >分割(列ソース、文字列パターン) { ベクトル < ストリング > RES。 INT SPOS = 0、EPOS、p_len = pattern.length() - 1 、s_len = source.length() - 1 ; 出典 + = パターン; CHAR COL = ' 1 ' ; ながら(SPOS <s_len &&(EPOS = source.find(パターン、SPOS))&& EPOS =!文字列:: NPOS) { ストリームにstringstream、ストリーム << COL ++ ; //は、列番号の末尾に追加する理由は、データ複製の異なる列を防止することができる res.push_back((source.substr(SPOS、EPOS - SPOS))アペンド(stream.str()。 )); SPOS = EPOS用+ 1 ; } 戻りRES; } int型のmain() { FILE* FP = freopenは(" data5_9.in "、" R " 、STDIN)。 freopenは(" data5_9.out "、" W " 、STDOUT)。 文字列のライン。 int型の行、COL。 一方、(!(CIN >>行)&&行= 0 ) { // 获取行列数 CIN >> COL。 ベクトル < 文字列 > str_vec。 セット < 文字列 > str_set。 マップ < 文字列、> Str_map; ベクター < INT > RES; // 2つの行を保存し、一つは繰り返し のために(INT R&LT = 1 ; R&LT <=行R&LT ++ ) { GETCHAR(); のgetline(CIN、ライン); //キーが使用 str_vec =スプリット(行、" "); // ないスプリット列パーティション関数ので、SUBSTRを見つけて使用する分割 ベクトル < ストリング > :: = str_vec.begin ITERイテレータ(); // 反復が挿入INT C = 1 ; のため (;!= Str_vec.end ITER(); ITER ++ ) { IF(str_set.count(*!ITER)) { str_set.insert( * ITER); str_map [ * ITER] = R&LT * 10 + C ++ ; } 他の // 同じ列を繰り返し現れる { INT R_r =(str_map [* ITER] / 10)* 10 + R&LT; 3 //行が23繰り返される表し res.push_back(R_r * 10 + C ++); //重複ランクを追加RESをマッピング } } } IF(res.empty()) // 結果を出力 裁判所未満<< " YES " << てendl; 他の { 裁判所未満 << " NO " << てendl; INT r_r = res.front()。 COUT << r_r / 100 << ' ' << r_r / 10%10 << ENDL。 // 输出行 のために(ベクトル< 整数 > ::それはres.beginを()=イテレータ; =それres.endを();!それ++ ) はcout << *それ%10 < ; // 输出列 はcout << てendl; } } freopenは(" CON "、" R " 、STDIN)。 freopenは(" CON "、" W " 、STDOUT)。 リターン 0 ; }