NOIP2008普及組複賽T2 排座椅

2021-10-14 06:11:43 字數 3567 閱讀 1652

有乙個m

mm行n

nn列的教室座位中,有d

dd對同學總愛湊在一起講話。現老師要用走廊隔開他們。但只能在行之間加入k

kk條走廊,在列中加入l

ll條走廊,問加在**能使效果最佳。(一對愛講話的同學只有左右相鄰或上下相鄰)。

輸入格式

第一行,有5

55個用空格隔開的整數,分別是m,n

,k,l

,dm,n,k,l,d

m,n,k,

l,d。

接下來d

dd行,每行有4

44個用空格隔開的整數,第i

ii行的4

44個整數xi,

yi,p

i,qi

x_i,y_i,p_i,q_i

xi​,yi

​,pi

​,qi

​,表示坐在位置(xi,

yix_i,y_i

xi​,yi

​)與(pi,

qip_i,q_i

pi​,qi

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

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

輸出格式

共兩行。

第一行包含k

kk個整數,a1a

2…ak

a_1 a_2 … a_k

a1​a2​

…ak​

,表示第a

1a_1

a1​行和a1+

1a_1+1

a1​+

1行之間、第a

2a_2

a2​行和第a2+

1a_2+1

a2​+

1行之間、…、第a

ka_k

ak​行和第ak+

1a_k+1

ak​+

1行之間要開闢通道,其中ai+1

a_iai​​+

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

第二行包含l

ll個整數,b1b

2…bk

b_1 b_2 … b_k

b1​b2​

…bk​

,表示第b

1b_1

b1​列和b1+

1b_1+1

b1​+

1列之間、第b

2b_2

b2​列和第b2+

1b_2+1

b2​+

1列之間、…、第b

lb_l

bl​列和第bl+

1b_l+1

bl​+

1列之間要開闢通道,其中bi+1

b_ibi​​+

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

若有多組答案,輸出字典序最小的一組。

資料規模2≤n

,m≤1000

2 ≤ n,m\le1000

2≤n,m≤

1000,0≤

k<

m0 \le k0≤

k0 ≤l

d≤2000

0\le l0≤

ld≤20

00輸入樣例

4 5 1 2 3

4 2 4 3

2 3 3 3

2 5 2 4

輸出樣例2

2 4提示

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

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

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

根據題目描述,可以在行之間和列之間插入走廊、隔開說話的同學,問加在**能使效果最佳。不妨以行為例,當然是在上下相鄰且交頭接耳人數最多的k

kk行插入走廊效果最佳。例如對於輸入樣例,在(2,

3)、(

3,3)

(2,3)、(3,3)

(2,3)、

(3,3

)兩個同學之間(即第2

22行)插入走廊,效果最佳。

因此,我們可以遍歷所有交頭接耳的兩位同學,統計他們出現在行列中的次數row

[i]、

col[

i]row[i]、col[i]

row[i]

、col

[i]。不妨設他們的位置為(x1

,y1)

、(x2

,y2)

(x1, y1)、(x2, y2)

(x1,y1

)、(x

2,y2

):統計完畢後,分別對行列按次數排序,排序後取前k

kk行和前l

ll列即可。

排序演算法的時間複雜度為o(n

logn

)=1000×l

og(1000

)o(nlogn) = 1000 \times log(1000)

o(nlog

n)=1

000×

log(

1000

)。

#include

#include

using namespace std;

typedef pair<

int,

int> pii;

const

int n =

1010

;//row[i].first表示行號,row[i].second表示該行相鄰同學的個數

//col[i].first表示列號,col[i].second表示該列相鄰同學的個數

pii row[n]

, col[n]

;int

cmp(pii x, pii y)

intmain()

else

//相同行

}//按出現次數從大到小排序

sort

(row +

1, row + n +

1, cmp)

;//對前k個數按行號從小到大排序

sort

(row +

1, row + k +1)

;for

(int i =

1; i <= k; i ++

)//按出現次數從大到小排序

sort

(col +

1, col + m +

1, cmp)

;//對前l個數按列號從小到大排序

sort

(col +

1, col + l +1)

;for

(int i =

1; i <= l; i ++

)return0;

}

NOIP2008普及組題解

noip2008普及組題解 從我在其他站的部落格直接搬過來的 posted 2016 04 16 01 11 t1 isbn號碼 每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識別碼和3位分隔符,其規定格式如 x xx x 其中符號 就是分隔符 鍵盤上的減號 最後一位...

NOIP2008 普及組 T3 傳球遊戲

上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出去的那個同...

NOIP2008普及組 排座椅

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