洛谷p1056 排座椅 模擬,貪心

2021-08-21 03:34:34 字數 2392 閱讀 8465

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

同學們在教室中坐成了 m

m 行 n

n 列,坐在第i行第j列的同學的位置是 (i,j)(i

,j) ,為了方便同學們進出,在教室中設定了 k

k 條橫向的通道, l

l 條縱向的通道。

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

2 個會交頭接耳的同學,那麼他們就不會交頭接耳了。

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

輸入格式:

第一行,有 5

5 個用空格隔開的整數,分別是 m,n,k,l,d(2 \le n,m \le 1000,0 \le km,

n,k,

l,d(

2≤n,

m≤10

00,0

≤k0≤

ld≤20

00)接下來的 d

d 行,每行有 4

4 個用空格隔開的整數。第 i

i 行的 4

4 個整數 x_i,y_i,p_i,q_ixi

​,yi

​,pi

​,qi

​ ,表示坐在位置 (x_i,y_i)(x

i​,y

i​)與 (p_i,q_i)(p

i​,q

i​) 的兩個同學會交頭接耳(輸入保證他們前後相鄰或者左右相鄰)。

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

輸出格式:

共兩行。

第一行包含 k

k 個整數 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​​+

1 ,每兩個整數之間用空格隔開(行尾沒有空格)。

第二行包含 l

l 個整數 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 ,每兩個整數之間用空格隔開(列尾沒有空格)。

輸入樣例#1:

複製

4 5 1 2 3
4 2 4 3

2 3 3 3

2 5 2 4

輸出樣例#1:

複製

2
2 4

上圖中用符號*、※、+標出了 3

3 對會交頭接耳的學生的位置,圖中 3

3 條粗線的位置表示通道,圖示的通道劃分方案是唯一的最佳方案。

2023年普及組第二題

思路:用乙個結構體來記錄行和列所在的位置,並且每一次劃分所劃分的人數為多少,然後從大到小排序找到劃分人數最多的一種方法。注意這道題的輸出要有小到大。

#include#define maxn 10001
using namespace std;

struct nodex[maxn],y[maxn];

bool cmp1(node a,node b)

bool cmp2(node a,node b)

int main()

//同一列

if(y1==y2)

}//按分割的人數由小到大排序

sort(x+1,x+1+m,cmp1);

sort(y+1,y+1+n,cmp1);

//輸出由大到小排序

sort(x+1,x+1+k,cmp2);

sort(y+1,y+1+l,cmp2);

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

printf("%d ",x[i].q);

printf("\n");

for(int j=1;j<=l;j++)

printf("%d ",y[j].q);

printf("\n");

}return 0;

}

洛谷 P1056 排座椅 模擬 貪心

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

洛谷 P1056 排座椅(貪心)

貪心規律 不管是行還是列,優先輸出價值大 即能把交頭接耳同學盡可能多的分開 的序號。使用結構體記錄序號mark和該號序的價值,分別輸入統計所有行序號和所有列序號的價值。因此,只需對統計好的行結構體陣列 列結構體陣列按價值從大到小排序,分別取前k和前l個的位置座標即可,可以證明這是最優的思路。要注意有...

洛谷 P1056 排座椅

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