洛谷链接:https://www.luogu.com.cn/problem/P1056
注意:第二层for循环 j 写成 i 找了我半小时。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] x=new int[1005]; //横坐标数组
int[] y=new int[1005]; //纵坐标数组
int[] c=new int[1005]; //横
int[] o=new int[1005]; //纵
Scanner in=new Scanner(System.in);
int m=in.nextInt(); //m行
int n=in.nextInt(); //n列
int k=in.nextInt(); //k条横道
int l=in.nextInt(); //l条纵道
int d=in.nextInt(); //d对同学交头接耳
for(int i=1;i<=d;i++) {
//输入d对同学
int xi=in.nextInt();
int yi=in.nextInt();
int pi=in.nextInt();
int qi=in.nextInt();
if(xi==pi) {
//横坐标相同,纵道
x[Math.min(yi, qi)]++; //表示隔开这两排的价值
}else {
//纵坐标相同,横道
y[Math.min(xi, pi)]++; //记得取min,即过道与前一个坐标保持一致
}
}
//开始桶排序,求出k条价值最大的横道
for(int i=1;i<=k;i++) {
int max=-1; //为了求出每次的最大值,需要每次扫一遍
int p=0;
for(int j=1;j<m;j++) { //横道不能到m
if(y[j]>max) {
max=y[j];
p=j;
}
}
y[p]=0; //求出max之后一定要记得清零!!否则无论排多少次都是一个答案
c[p]++; //标记,桶排
}
//开始桶排序,求出l条价值最大的纵道
for(int i=1;i<=l;i++) {
int max=-1; //为了求出每次的最大值,需要每次扫一遍
int p=0;
for(int j=1;j<n;j++) { //纵道不能到n
if(x[j]>max) {
max=x[j];
p=j;
}
}
x[p]=0; //求出max之后一定要记得清零!!否则无论排多少次都是一个答案
o[p]++; //标记,桶排
}
//输出横道答案
for(int i=0;i<1005;i++)
{
if(c[i]!=0) { //表示需要隔开这行
System.out.print(i+" ");
}
}
System.out.println();
//输出横道答案
for(int i=0;i<1005;i++)
{
if(o[i]!=0) { //表示需要隔开这行
System.out.print(i+" ");
}
}
}
}