ブルーブリッジカップ_チップテスト


問題の説明はn(2≦n≦20)ブロックチップがあり、良いチップと悪いチップがあり、良いチップが悪いチップより多いことが知られている.各チップは他のチップをテストするために使用できます.他のチップをチップでテストすると、テストされたチップが良いか悪いかを正確に与えることができます.一方、悪いチップで他のチップをテストすると、良いか悪いかのテスト結果がランダムに与えられます(すなわち、この結果は被テストチップの実際の良し悪しとは関係ありません).すべてのチップのテスト結果を示し、どのチップが良いチップなのかを尋ねます.入力フォーマット入力データの第1の動作は、チップ個数を表す整数nである.2行目からn+1行目n*nのテーブルで、1行n個のデータが表示されます.表中の各データは0または1であり、このn行のi行目j列目(1≦i,j≦n)のデータは、iブロック目チップでjブロック目チップをテストしたときに得られたテスト結果を示し、1は良い、0は悪い、i=jの場合は一律に1(このチップが自分に対するテスト結果を示さない.コアシートは自分に対してテストできない)である.出力フォーマットは、すべての良いチップの番号付けサンプルを小さい順に出力3 1 0 1 0 1 0 1 0 1 0 1サンプル出力1 3
第一眼は少しぼんやりしています(これは何の法則がありますか)...参考ネット上の大神の考え方(膜拝大神):
良いチップは別のチップをテストして正しい結果で、悪いのはランダムな結果で、それから、テーマの中でまた、第i、j位置の意味はiチップがjチップをテストした結果で、それでは、第j列は他のチップがjをテストした結果で、テーマの中で良いチップの数は悪いチップの数より大きいと言って、それでは私達はj列の数字の1多点を統計して0多点で、チップの良し悪しを判断することができます.(はっと悟る…)
#include
using namespace std;

int main()
{
	int n;
	cin >> n;
	int chip[n][n], sum;
	for(int i = 0; i < n; ++i)
		for(int j = 0; j < n; ++j)
			cin >> chip[i][j];
	for(int j = 0; j < n; ++j)
	{
		sum = 0;
		for(int i = 0; i < n; ++i)
		{	
			if(chip[i][j] == 1)
				sum++;
		}
		if(sum > n/2)
			cout << j+1 << ' ';
	}
    return 0;
}