简单问题

来源:互联网 发布:如何防范网络黑客攻击 编辑:程序博客网 时间:2024/05/17 06:14

简单问题

题目描述

给你一个n*m的矩阵,其中的元素每一行从左到右按递增顺序排序,每一列从上到下按递增顺序排序,然后给你一些数x,问这些书在不在这个矩阵中,若在,输出其列号最大的元素坐标。

输入

多组测试样例,首先两个数n,m(0<n,m<=1000)
然后n行m列的一个矩阵,其中的元素保证在32位整型范围
然后一个数cnt,表示询问数的个数(0<cnt<=100)
然后是cnt个要询问的元素

输出

如果存在,输出其列号最大的元素坐标
否则,输出“NO”

样例输入

4 41 2 8 92 4 9 124 7 10 136 8 11 1537 8 14

样例输出

3 21 3NO


由题意知,每行从左往右是递增的,每列从上到下是递增的

因此,从第一行右边开始,若该元素大于要找的值,则左移;若该元素小于要找的值,则下移,继续按上述方法判断,若没有找到,则矩阵中不存在该元素,否则输出位置坐标


#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;}}elsebreak;}if(flag)cout<<"NO"<<endl;elsecout<<x<<" "<<y<<endl;}}return 0;}




0 0
原创粉丝点击