百炼 3670:计算鞍点

来源:互联网 发布:修改vnc端口 编辑:程序博客网 时间:2024/05/17 05:14

头晕晕做这种行列互换的题


//@auther zhou//@Number 201408070203//@start time://@finish time:/*@此处注意:*//* 测试数据*/#include<iostream>#include<cstring>#include<vector>#include<cmath>#include<algorithm>using namespace std;int main(){int a[5][5];for(int i=0;i<5;i++)for(int j=0;j<5;j++)cin>>a[i][j];int linemax[5];int arrowm[5];int ansline[5];int ansarrow[5];for(int i=0;i<5;i++){int mline=0;for(int j=0;j<5;j++){mline=max(mline,a[i][j]);if(mline==a[i][j]) linemax[i]=j;}ansline[i]=a[i][linemax[i]];//cout<<"linemax:" <<linemax[i]<<" "<<ansline[i]<<endl;}//cout<<endl;for(int j=0;j<5;j++){int arrowmin=999999;for(int i=0;i<5;i++){arrowmin=min(arrowmin,a[i][j]);if(arrowmin==a[i][j]) arrowm[j]=i;}ansarrow[j]=a[arrowm[j]][j];//cout<<"arrowmin:" <<arrowm[j]<<" "<<ansarrow[j]<<endl;}int flag=0;int ansi,ansj;for(int i=0;i<5;i++){if(ansline[i]==ansarrow[linemax[i]]){flag=1;ansi=i;ansj=linemax[i];}}if(flag) cout<<ansi+1<<" "<<ansj+1<<" "<<a[ansi][ansj];else cout<<"not found";return 0;}













总时间限制: 

1000ms 
内存限制: 
65536kB
描述

给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。
鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25

输入
输入包含一个5行5列的矩阵
输出
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"
样例输入
11 3 5 6 912 4 7 8 1010 5 6 9 118  6 4 7 215 10 11 20 25
样例输出
4 1 8
原创粉丝点击