您的位置:首页 > 其它

简单问题

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nyoj