输入有多组数据。
每组数据的第一行包含两个整数,m和n。紧接着是mxn(1≤m, n≤50)的矩阵,表示队伍里每位大妈的年龄。
对应每组数据,按照从上到下、从左到右的顺序依次输出所有鞍点的坐标(从1开始)。
如果没有任何鞍点,输出“No Point”。
每组数据之后输出一个空行作为间隔。
3 4 55 68 54 82 52 66 43 66 48 77 83 70 2 3 1 2 3 4 5 6
2 2 2 4 1 3
先找出每行最大值和每列最小值,然后判定鞍点 #include<iostream> #include<vector> #include<string> #include<algorithm> #include<functional> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #include <exception> #include <iomanip> #include <memory> #include <sstream> #define INF 1000000 using namespace std; int main(int argc, char** argv) { //freopen("in.txt", "r", stdin); int m, n; while (cin >> m >> n && m > 0 && n > 0) { vector<vector<int>> age(m, vector<int>(n, 0)); vector<int> rowLargest(m, 0); vector<int> colSmallest(n, INF); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { cin >> age[i][j]; rowLargest[i] = max(rowLargest[i], age[i][j]); colSmallest[j] = min(colSmallest[j], age[i][j]); } } vector<pair<int, int>> res; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (age[i][j] == rowLargest[i] && age[i][j] == colSmallest[j]) res.emplace_back(i + 1, j + 1); } } if (res.empty()) cout << "No Point" << endl; else { for (auto& pr : res) cout << pr.first << " " << pr.second << endl; } cout << endl; } return 0; }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int[][] matrix=new int[50][50]; int[][] flagMatrix=new int[50][50]; int n=sc.nextInt(); int m=sc.nextInt(); for(int i=0;i<n;i++){ int rowMax=0; for(int j=0;j<m;j++){ matrix[i][j]=sc.nextInt(); if(matrix[i][j]>rowMax) rowMax=matrix[i][j]; } for(int j=0;j<m;j++) if(matrix[i][j]==rowMax) flagMatrix[i][j]++; } int flag=0; for(int j=0;j<m;j++){ int colMin=Integer.MAX_VALUE; for(int i=0;i<n;i++){ if(matrix[i][j]<colMin) colMin=matrix[i][j]; } for(int i=0;i<n;i++){ if(matrix[i][j]==colMin){ flagMatrix[i][j]++; if(flagMatrix[i][j]==2){ flag=1; System.out.println((i+1)+" "+(j+1)); } } } } if(flag==0){ System.out.println("No Point"); } System.out.println(); } } }
#include <stdio.h> #include <stdlib.h> void FindPoint(int *p, int m, int n); int main(void) { int m=0, n=0, *p=NULL; while(scanf("%d %d", &m, &n)!=EOF) { p=(int *)calloc(m*n, sizeof(int)); FindPoint(p, m, n); free(p); } return 0; } void FindPoint(int *p, int m, int n) { int i=0, j=0, *Big=NULL, FdFlag=0, FdCnt=0; int Tmp=0; int a=0; Big=(int *)calloc(m, sizeof(int)); for(i=0; i<m; i++) { scanf("%d", &Tmp); *(p+i*n+0)=Tmp; for(j=1; j<n; j++) { scanf("%d", (p+i*n+j)); if(Tmp<*(p+i*n+j)) Tmp=*(p+i*n+j); } *(Big++) = Tmp; } Big -= m; for(i=0; i<m; i++) { for(j=0; j<n; j++) { if(*(Big)==*(p+i*n+j)) { for(a=0; a<m; a++) { if(*(Big)>*(p+a*n+j)&&a!=i) { FdFlag=1; /// FdFlag = 1²»ÊÇ°µµã break; } } if(!FdFlag) { printf("%d %d\n", i+1, j+1); FdCnt=1; } else FdFlag=0; } } Big++; } if(!FdCnt) printf("No Point\n\n"); else printf("\n"); Big -= m; free(Big); }
// write your code here cpp #include <iostream> #include <vector> using namespace std; int m,n; bool isPoint(int row,int col,const vector<vector<int>>& mat) { for(int i=0;i<m;i++) { if(mat[i][col]<mat[row][col]) return false; } for(int i=0;i<n;i++) { if(mat[row][i]>mat[row][col]) return false; } return true; } int main() { while(cin>>m>>n) { vector<vector<int>> mat(m,vector<int>(n)); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) cin>>mat[i][j]; } bool isTrue=true; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(isPoint(i,j,mat)) { isTrue=false; cout<<i+1<<" "<<j+1<<endl; } } } if(isTrue) cout<<"No Point"<<endl; cout<<endl; } return 0; }
#include<iostream> #include<map> #include<vector> using namespace std; int main() { int n, m, num, max; while (cin >> n >> m) { vector<vector<int> > data; vector<int> maxdata; multimap<int, int> maxpoint, minpoint; for (int i = 0; i < n; i++) { max = 0; vector<int> t; for (int j = 0; j < m; j++) { cin >> num; if (max < num) max = num; t.push_back(num); } data.push_back(t); maxdata.push_back(max); } for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (data[i][j] == maxdata[i]) { pair<int, int> p = make_pair(i + 1, j + 1); maxpoint.insert(p); } for (int i = 0; i < m; i++) { max = 999999999; for (int j = 0; j < n; j++) if (data[j][i] < max) max = data[j][i]; for (int j = 0; j < n; j++) if (data[j][i] == max) { pair<int, int> p = make_pair(j + 1, i + 1); minpoint.insert(p); } } int cnt = 0; for (multimap<int, int>::iterator it = maxpoint.begin(); it != maxpoint.end(); it++) for (multimap<int, int>::iterator k = minpoint.begin(); k != minpoint.end(); k++) if (it->first == k->first&&it->second == k->second) { cout << it->first << " " << it->second << endl; cnt++; } if (cnt == 0) cout << "No Point" << endl; cout << endl; } return 0; }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int m = sc.nextInt(); int n = sc.nextInt(); int[][] a = new int[m][n]; int[][] at = new int[n][m]; // a的转置矩阵 int[] row = new int[m]; // 记录行的最大值 for (int i = 0; i < m; i ++ ) { int max = 0; for (int j = 0; j < n; j ++ ) { int x = sc.nextInt(); a[i][j] = x; at[j][i] = x; max = max > x ? max : x; } row[i] = max; } boolean isFinded = false; for (int i = 0; i < at.length; i ++ ) { int min = Integer.MAX_VALUE; for (int j = 0; j < at[0].length; j ++ ) { min = min < at[i][j] ? min : at[i][j]; } for (int j = 0; j < row.length; j ++ ) { if(min == row[j]) { isFinded = true; System.out.println((j + 1) + " " + (i + 1)); } } } if( ! isFinded) System.out.println("No Point"); System.out.println(); } } }
#include <iostream> #include <vector> using namespace std; int main() { int m, n; while (cin >> m >> n && (m || n)) { vector<vector<int> > table(m, vector<int>(n)); for (int i = 0; i < m; ++i) for (int j = 0; j < n; ++j) cin >> table[i][j]; int count = 0; for (int i = 0; i < m; ++i) for (int j = 0; j < n; ++j) { int k; for (k = 0; k < n; ++k) if (table[i][j] >= table[i][k]) continue; else break; if (k != n) continue; for (k = 0; k < m; ++k) if (table[i][j] <= table[k][j]) continue; else break; if (k != m) continue; ++count; cout << i + 1 << " " << j + 1 << endl; } cout << (count ? "" : "No Point\n") << endl; } return 0; }