零分求助

P1056 [NOIP2008 普及组] 排座椅

``` #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<<" "; } } ```
by wupeichen @ 2022-05-02 16:35:41


|