1 条题解

  • 0
    @ 2023-6-11 12:20:59

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    /*
      m行n列 k条横向通道 l条纵向通道 d对说话的同学
    */
    int m,n,k,l,d;
    //横纵坐标数组,存储在这个位置画线隔开几对同学
    int x[1010],y[1010];
    //横纵坐标桶排序的数组 
    int rx[1010],ry[1010]; 
    int main(){
    	//提升读写效率 
    	ios::sync_with_stdio(false);
    	int x1,y1,x2,y2;//用来存放说话的人的坐标
    	int i,j;
    	cin>>m>>n>>k>>l>>d; 
    	//读入d对说话的人 
    	for(i = 1;i <= d;i++){
    		cin>>x1>>y1>>x2>>y2;
    		//说明在同一行,用列隔开 
    		if(x1 == x2){
    			//该列的线能隔开几个人(线在人的右侧) 
    			y[min(y1,y2)]++; 
    		}else{
    			//该行的线能隔开几个人(线在人的上方) 
    			x[min(x1,x2)]++;
    		}
    	}
    	
    	//桶排序,标记k条横向的通道 
    	for(i = 1;i <= k;i++){
    		int maxn = -1;
    		int p;
    		for(j = 1;j < m;j++){
    			if(x[j] > maxn){
    				maxn = x[j];
    				p = j;
    			}
    		}
    		//标记该行的线分割了0个人 
    		x[p] = 0; 
    		rx[p]++;
    	} 
    	
    	//桶排序,标记l条纵向的通道 
    	for(i = 1;i <= l;i++){
    		int maxn = -1;
    		int p;
    		for(j = 1;j < n;j++){
    			if(y[j] > maxn){
    				maxn = y[j];
    				p = j;
    			}
    		} 
    		//标记该列的线分割了0个人 
    		y[p] = 0;
    		ry[p]++;
    	}
    	
    	for(i = 0;i < 1005;i++){
    		if(rx[i]) cout<<i<<" ";
    	}
    	cout<<endl;
    	for(i = 0;i < 1005;i++){
    		if(ry[i]) cout<<i<<" ";
    	}
    }
    
    
    • 1

    信息

    ID
    2672
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者