タイトル1:2 D配列での検索

1591 ワード

時間制限:1秒
メモリ制限:32メガ
特殊問題:いいえ
提出:3174
解決:485
タイトルの説明:
2 D配列では、各行が左から右に増加し、各列が上から下に増加した順にソートされます.関数を完了し、このような2次元配列と整数を入力して、配列にその整数が含まれているかどうかを判断してください.
入力:
入力には、各テストケースについて、複数のテストケースが含まれる場合があります.
入力される第1の動作の2つの整数mおよびn(1<=m,n<=1000):入力するマトリクスの行数および列数を表す.
入力された2行目には、検索する数値を表す整数t(1<=t<=1000000)が含まれます.
次のm行は、各行にn個の数があり、問題が与えるm行n列を表す行列(行列は、問題記述に示すように、各行が左から右に増加する順序で並べ替えられ、各列が上から下に増加する順序で並べ替えられる.
出力:
各テストケースに対応し、
出力「Yes」は、2次元配列で数値tが見つかったことを表します.
出力「No」は、2次元配列に数字tが見つからないことを表す.
サンプル入力:
3 3
5
1 2 3
4 5 6
7 8 9
3 3
1
2 3 4
5 6 7
8 9 10
3 3
12
2 3 4
5 6 7
8 9 10

サンプル出力:
Yes
No
No

コードは次のとおりです.
#include<iostream>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	int m,n,t;
	int row,col;
	int arr[1000][1000];

	while(cin >> m >> n && !cin.eof())
	{
		cin >> t;
		for(int i = 0; i < m;)
		{
			for(int j = 0; j < n; j++)
			{
				cin >> arr[i][j];
			}
			i++;
		}
		row = -1;
		for(int i = 0; i < m;i++)
		{
			if(t >= arr[i][0] && t <= arr[i][n-1])
			{
				row = i;
				break;
			}
		}

		if(row < 0)
			cout << "No"<< endl;
		else
		{
			bool flag = false;
			for(int i = 0; i < n; i++)
				if(arr[row][i] == t)
				{
					cout << "Yes" << endl;
					flag = true;
					break;
				}
			
			if(flag == false)
				cout << "No" << endl;
		}
	}
	
	return 0;
}