国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

洛谷_P1056 排座椅

2019-11-14 12:43:12
字體:
來源:轉載
供稿:網友

題目描述

上課的時候總會有一些同學和前后左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之后,只有有限的D對同學上課時會交頭接耳。同學們在教室中坐成了M行N列,坐在第i行第j列的同學的位置是(i,j),為了方便同學們進出,在教室中設置了K條橫向的通道,L條縱向的通道。于是,聰明的小雪想到了一個辦法,或許可以減少上課時學生交頭接耳的問題:她打算重新擺放桌椅,改變同學們桌椅間通道的位置,因為如果一條通道隔開了兩個會交頭接耳的同學,那么他們就不會交頭接耳了。請你幫忙給小雪編寫一個程序,給出最好的通道劃分方案。在該方案下,上課時交頭接耳的學生的對數最少。

輸入格式:

輸入文件seat.in的第一行,有5個用空格隔開的整數,分別是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。接下來的D行,每行有4個用空格隔開的整數。第i行的4個整數Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)與(Pi,Qi)的兩個同學會交頭接耳(輸入保證他們前后相鄰或者左右相鄰)。輸入數據保證最優方案的唯一性。

輸出格式:

輸出文件seat.out共兩行。第一行包含K個整數,a1,a2……aK,表示第a1行和a1+1行之間、第a2行和a2+1行之間、…、第aK行和第aK+1行之間要開辟通道,其中ai< ai+1,每兩個整數之間用空格隔開(行尾沒有空格)。第二行包含L個整數,b1,b2……bL,表示第b1列和b1+1列之間、第b2列和b2+1列之間、…、第bL列和第bL+1列之間要開辟通道,其中bi< bi+1,每兩個整數之間用空格隔開(列尾沒有空格)。

題解:

使用結構體標記x,y軸,然后在讀入每一對同學時,如果他們x軸相同就放在一個組,y軸相同放在另一個組,然后把對應的數組的值+1。(對于x軸和y軸,某一條無論怎么分割對其他的分割線都沒有影響。)然后對讀入后這兩個結構體的值降序排序,取前k和前l個的位置坐標輸出即可,可以證明這是最優的思路。

代碼:

var s,d,f,g,h,j,z:longint; a:array[1..3000,1..5] of integer; a1:array[1..3000,1..5] of integer; m,n,k,l,i:integer;begin read(m,n,k,l,i); z:=0; j:=0; for s:=1 to i do begin read(d,f,g,h); if d=g then begin z:=z+1; if f<h then begin a[z,1]:=f; a[z,2]:=h; a[z,5]:=d; end else begin a[z,1]:=h; a[z,2]:=f; a[z,5]:=d end; end; if f=h then begin j:=j+1; if d<g then begin a1[j,1]:=d; a1[j,2]:=g; a1[j,5]:=f; end else begin a1[j,1]:=g; a1[j,2]:=d; a1[j,5]:=f; end; end; end; for s:=1 to j do if a1[s,3]=0 then begin a1[s,3]:=1; a1[s,4]:=a1[s,4]+1; for d:=s+1 to j do if (a1[s,1]=a1[d,1]) and (a1[s,2]=a1[d,2]) then begin a1[d,3]:=1; a1[s,4]:=a1[s,4]+1; end; end; for s:=1 to j-1 do for d:=s+1 to j do if a1[s,4]<a1[d,4] then for f:=1 to 5 do begin g:=a1[s,f]; a1[s,f]:=a1[d,f]; a1[d,f]:=g; end; for s:=1 to k-1 do for d:=s+1 to k do if a1[s,1]>a1[d,1] then for f:=1 to 5 do begin g:=a1[s,f]; a1[s,f]:=a1[d,f]; a1[d,f]:=g; end; for s:=1 to k do write(a1[s,1],' '); writeln; for s:=1 to z do if a[s,3]=0 then begin a[s,3]:=1; a[s,4]:=a[s,4]+1; for d:=s+1 to z do if (a[s,1]=a[d,1]) and (a[s,2]=a[d,2]) then begin a[d,3]:=1; a[s,4]:=a[s,4]+1; end; end; for s:=1 to z-1 do for d:=s+1 to z do if a[s,4]<a[d,4] then for f:=1 to 5 do begin g:=a[s,f]; a[s,f]:=a[d,f]; a[d,f]:=g; end; for s:=1 to l-1 do for d:=s+1 to l do if a[s,1]>a[d,1] then for f:=1 to 5 do begin g:=a[s,f]; a[s,f]:=a[d,f]; a[d,f]:=g; end; for s:=1 to l do write(a[s,1],' ');end.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 基隆市| 新平| 丰台区| 丹寨县| 平利县| 杭锦后旗| 石城县| 泸溪县| 方城县| 长治市| 无极县| 荣成市| 谷城县| 莱阳市| 荥阳市| 偏关县| 麟游县| 林口县| 四子王旗| 平罗县| 惠东县| 宽甸| 武冈市| 津南区| 杨浦区| 玉环县| 江西省| 烟台市| 讷河市| 浙江省| 三明市| 花莲县| 峨眉山市| 扶沟县| 巴彦县| 牟定县| 迁安市| 邢台市| 怀安县| 宁河县| 惠水县|