9度_タイトル1384:2 D配列での検索


//一部の答えが通るのは、最悪のこと
時間制限:1秒メモリ制限:32メガ特殊判定:Noコミット:12959解決:2562問題説明:2 D配列では、各行が左から右に増加する順序でソートされ、各列が上から下に増加する順序でソートされます.関数を完了し、このような2次元配列と整数を入力して、配列にその整数が含まれているかどうかを判断してください.入力:入力には複数のテストサンプルが含まれる場合があります.各テストケースについて、入力する最初の動作の2つの整数mとn(1<=m、n<=1000):入力するマトリクスの行数と列数を表します.入力された2行目には、検索する数値を表す整数t(1<=t<=1000000)が含まれます.次のm行は、行ごとにn個の数があり、テーマを表すm行n列の行列(マトリクスは、タイトル記述のように、各行が左から右へインクリメントされた順に並べ替えられ、各列が上から下へインクリメントされた順に並べ替えられている.出力:各テストケースに対応して、出力「Yes」は、2次元配列においてデジタルtが見つかったことを表す.出力「No」は、2次元配列においてデジタルtが見つからなかったことを表す.サンプル入力:3 3 3 3 5 1 2 3 4 4 4 7 8 3 3 3 3 3 3 3 3 4 4 4 6 6 6 8 10 3 2 2 2 2 3 3 3 3 4 4 4 6 7 9 10サンプル出力出:Yes No No
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int row=0,col=0,num=0;
	while(cin>>row>>col)
	{
		int flag=0;
		int min=0;//to store the smaller num of row and col
		int temp=0;
		cin>>num;
		int **array=new int *[row];
		for(int i=0;i<row;i++)
		{
			array[i]=new int[col];
			for(int j=0;j<col;j++)
				scanf("%d",&array[i][j]);
		}
		if(num<array[0][0]){cout<<"No"<<endl;continue;}
		if(row<col)
			min=row;
		else
			min=col;
		for(int i=0;i<min;i++)
		{
			if(array[i][i]==num)
			{
				cout<<"Yes"<<endl;
				flag=1;
			}
			else if(array[i][i]>num||i==min-1)
			{
				temp=i;
				break;
			}
		}
		if(temp!=min-1)
		{
			int index=temp-1;
			for(int i=temp;i<col;i++)
				if(array[index][i]==num)
				{cout<<"Yes"<<endl;flag=1;}
				for(int i=0;i<temp;i++)
					if(array[temp][i]==num)
					{cout<<"Yes"<<endl;flag=1;}
		}else
		{
			if(min==row)
			{
				for(int i=min;i<col;i++)
					if(array[min-1][i]==num)
					{cout<<"Yes"<<endl;flag=1;}
			}else
			{
				for(int i=min;i<row;i++)
				{
					for(int j=0;j<col;j++)
					{
						if(array[i][j]==num)
						{cout<<"Yes"<<endl;flag=1;}
					}
				}
			}
		}
		if(!flag)
			cout<<"No"<<endl;
	}
	return 0;
}