请问为什么20分
查看原帖
请问为什么20分
468029
dfxgbm楼主2021/4/10 11:09

是不是思路有问题

#include <cstdio>
#include <algorithm>
#define MAX_SIZE 1001
#define MAX_TALK 2001
using namespace std;
int talk[MAX_SIZE][MAX_SIZE];
int res_h[MAX_TALK],res_p[MAX_TALK]; //存储水平与垂直分隔的结果  
int main(){
    int m,n,k,l,d;
    int col[MAX_SIZE],row[MAX_SIZE],k1=0,l1=0; //存储每列和后面一列、每行和后面一行喜欢讲话的人数 
    scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
    fill(col,col+n,-1);
    fill(row,row+m,-1);
    for(int i=0;i<d;i++){
    	int x1,x2,y1,y2;
    	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    	talk[x1-1][y1-1]=talk[x2-1][y2-1]=i+1;
	}
	for(int i=0;i<m;i++){ //查找每列和后面一列喜欢讲话的人数
		for(int j=0;j<n-1;j++){
			if(talk[i][j]!=0){
				if(talk[i][j]==talk[i][j+1]){
					col[j]++;
				}
			}
		}
	}
	for(int i=0;i<m-1;i++){ //每行和后面一行喜欢讲话的人数
		for(int j=0;j<n;j++){
			if(talk[i][j]!=0){
				if(talk[i][j]==talk[i+1][j]){
					row[i]++;
				}
			}
		}
	}
	while(k>0){
		int maxn=max_element(row,row+m)-row;
		res_h[k1++]=maxn+1;
		k--;
		row[maxn]=-1;
	}
	while(l>0){
		int maxn=max_element(col,col+n)-col;
		res_p[l1++]=maxn+1;
		l--;
		col[maxn]=-1;
	}
	sort(res_h,res_h+k1),sort(res_p,res_p+l1);
	printf("%d",res_h[0]);
	for(int i=1;i<k1;i++){
		printf(" %d",res_h[i]);
	}
	printf("\n%d",res_p[0]);
	for(int i=1;i<l1;i++){
		printf(" %d",res_p[i]);
	}
    return 0;
}
2021/4/10 11:09
加载中...