简单问题
2016-03-04 09:22
323 查看
简单问题
题目描述
给你一个n*m的矩阵,其中的元素每一行从左到右按递增顺序排序,每一列从上到下按递增顺序排序,然后给你一些数x,问这些书在不在这个矩阵中,若在,输出其列号最大的元素坐标。
输入
多组测试样例,首先两个数n,m(0<n,m<=1000)然后n行m列的一个矩阵,其中的元素保证在32位整型范围
然后一个数cnt,表示询问数的个数(0<cnt<=100)
然后是cnt个要询问的元素
输出
如果存在,输出其列号最大的元素坐标否则,输出“NO”
样例输入
4 4 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 3 7 8 14
样例输出
3 2 1 3 NO
由题意知,每行从左往右是递增的,每列从上到下是递增的
因此,从第一行右边开始,若该元素大于要找的值,则左移;若该元素小于要找的值,则下移,继续按上述方法判断,若没有找到,则矩阵中不存在该元素,否则输出位置坐标
#include<iostream>
#include<stdio.h>
using namespace std;
int a[1002][1001];
int main()
{
int n,m,k,d;
while(cin>>n>>m){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
scanf("%d",&k);
while(k--){
int flag=0,x=1,y=m;
scanf("%d",&d);
while(1){
if(a[x][y]>d){
y--;
if(y<1){
flag=1;
break;
}
}
else if(a[x][y]<d){
x++;
if(x>n){
flag=1;
break;
}
}
else break;
}
if(flag) cout<<"NO"<<endl;
else cout<<x<<" "<<y<<endl;
}
}
return 0;
}