洛谷 P1056 排座椅

2021-09-14 05:18:25 字數 2515 閱讀 3410

上課的時候總會有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的d對同學上課時會交頭接耳。

同學們在教室中坐成了mm行nn列,坐在第i行第j列的同學的位置是(i,j)(i,j),為了方便同學們進出,在教室中設定了kk條橫向的通道,ll條縱向的通道。

於是,聰明的小雪想到了乙個辦法,或許可以減少上課時學生交頭接耳的問題:她打算重新擺放桌椅,改變同學們桌椅間通道的位置,因為如果一條通道隔開了22個會交頭接耳的同學,那麼他們就不會交頭接耳了。

請你幫忙給小雪編寫乙個程式,給出最好的通道劃分方案。在該方案下,上課時交頭接耳的學生的對數最少。

輸入格式:

第一行,有55個用空格隔開的整數,分別是m,n,k,l,d(2 \le n,m \le 1000,0 \le k接下來的dd行,每行有44個用空格隔開的整數。第ii行的44個整數x_i,y_i,p_i,q_ixi​,yi​,pi​,qi​,表示坐在位置(x_i,y_i)(xi​,yi​)與(p_i,q_i)(pi​,qi​)的兩個同學會交頭接耳(輸入保證他們前後相鄰或者左右相鄰)。

輸入資料保證最優方案的唯一性。

輸出格式:

共兩行。

第一行包含kk個整數a_1,a_2,…,a_ka1​,a2​,…,ak​,表示第a_1a1​行和a_1+1a1​+1行之間、第a-2a−2行和a_2+1a2​+1行之間、…、第a_kak​行和第a_k+1ak​+1行之間要開闢通道,其中a_i< a_i+1ai​第二行包含ll個整數b_1,b_2,…,b_lb1​,b2​,…,bl​,表示第b_1b1​列和b_1+1b1​+1列之間、第b_2b2​列和b_2+1b2​+1列之間、…、第b_lbl​列和第b_l+1bl​+1列之間要開闢通道,其中b_i< b_i+1bi​輸入樣例#1:複製

4 5 1 2 3

4 2 4 3

2 3 3 3

2 5 2 4

輸出樣例#1:複製

上圖中用符號*、※、+標出了33對會交頭接耳的學生的位置,圖中33條粗線的位置表示通道,圖示的通道劃分方案是唯一的最佳方案。

2023年普及組第二題

錯誤**:

原因:自己想的太簡單了!!!

#include #include using namespace std;

int m, n, k, l, d; //d對同學交頭接耳,m行,n列.k條橫向通道,l條縱向通道

int x1[2000+10],y1[2000+10],x2[2000+10],y2[2000+10]; //交頭接耳的同學座標

int h[1000+10],lie[1000+10]; //需要開闢通道的行和列

bool vis_h[1000+10] = , vis_lie[1000+10] = ; //是否已被切過

int h_num = 0, lie_num= 0;

int main()

for(int i = 1; i <= d; i++)

}else

}} if(y1[i] == y2[i]) //行相同

}else

}} }

for(int i = 0; i < h_num; i++)

printf("\n");

for(int i = 0; i < lie_num; i++)

return 0;

}

別人的ac**:

思路:

#include#include#include#include#includeusing namespace std;

int m,n,k,l,d;//變數名最好起與題目一致的

int x[1005],y[1005];//橫縱座標陣列

int c[1005],o[1005];//桶排要用的陣列

int main()

for(int i=1; i<=k; i++) //開始桶排

}y[p]=0;//求出max之後一定要記得清零!!否則無論排多少次都是乙個答案

c[p]++;//桶排不解釋

} for(int i=1; i<=l; i++)

}x[p]=0; //同上

o[p]++;

} for(int i=0; i<1005; i++) //輸出答案

printf("\n");

for(int i=0; i<1005; i++)

return 0;

}

看了這位大佬的解答,順便學了新知識,桶排序!開心!

桶排序:

洛谷 P1056 排座椅

題目描述 上課的時候總會有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的d對同學上課時會交頭接耳。同學們在教室中坐成了m行n列,坐在第i行第j列的同學的位置是 i,j 為了方便同學們進出,在教室中設定了...

洛谷P1056 排座椅

上課的時候總會有一些同學和前後左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之後,只有有限的d對同學上課時會交頭接耳。同學們在教室中坐成了m行n列,坐在第i行第j列的同學的位置是 i,j 為了方便同學們進出,在教室中設定了k條橫向的...

洛谷P1056 排座椅

先上題目鏈結 注釋寫得多,直接貼 了 include include include using namespace std intmain else if ay by for i 1 i k i 退出這個迴圈時p為分割最大的線的下標 horizontal tmp false 求出一條分割最多的線後...