【NOIP普及组】2016模拟考试(10.29)——排座椅
生活随笔
收集整理的這篇文章主要介紹了
【NOIP普及组】2016模拟考试(10.29)——排座椅
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題 B: 排座椅(seat.cpp)
時間限制:?1 Sec??內存限制:?64 MB題目描述
上課的時候總有一些同學和前后左右的人交頭接耳,這是令小學班主任十分頭疼的一件事情。不過,班主任小雪發現了一些有趣的現象,當同學們的座次確定下來之后,只有有限的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個整數,a1a2……aK,表示第a1行和a1+1行之間、第a2行和第a2+1行之間、…、第aK行和第aK+1行之間要開辟通道,其中ai<ai+1,每兩個整數之間用空格隔開(行尾沒有空格)。 第二行包含L個整數,b1b2……bk,表示第b1列和b1+1列之間、第b2列和第b2+1列之間、…、第bL列和第bL+1列之間要開辟通道,其中bi<bi+1,每兩個整數之間用空格隔開(行尾沒有空格)。樣例輸入
4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4樣例輸出
2 2 4提示
?
上圖中用符號*、※、+ 標出了3對會交頭接耳的學生的位置,圖中3條粗線的位置表示通道,圖示的通道劃分方案是唯一的最佳方案。
#------------------------------------------------------------------------------#
這個題,看上去很像圖論,事實上是貪心……
大體思路:
輸入xi,yi,pi,qi,只要xi和pi相等,就表示兩個學生在同一排,則L[yi和qi中小的一個]++
如果yi和qi相等,就表示兩個學生在同一列,則K[xi和pi中小的一個]++,千萬不要弄反了。
為什么要小的一個++呢?
仔細觀察一下圖(題目也有說)就知道了,輸出的是ai與ai+1,如果存大的一個,通道就有問題了。
存的時候用結構體更方便,里面還需有一個a變量,存安放的位置,初始化a[i]均為i。
然后就是按K和L從大到小排序,注意還要再排一次a,因為題目說需從小到大輸出!
然后直接輸出即可。
代碼:
#include<cstdio> #include<algorithm> using namespace std; int m,n,k,l,d; struct node {int a,n; }x[1002],y[1002];//結構體 bool _c(node x,node y) {return x.n>y.n;//按n }//sort從大到小 bool c_(node x,node y) {return x.a<y.a;//按a }//sort從小到大 int main() {scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);for(int i=1;i<=max(m,n);i++)x[i].a=y[i].a=i;//初始化for(int i=1;i<=d;i++){int _x,_y,_p,_q;scanf("%d%d%d%d",&_x,&_y,&_p,&_q);if(_y==_q) x[min(_x,_p)].n++;//在同一列if(_x==_p) y[min(_y,_q)].n++;//在同一行}sort(x+1,x+n+1,_c); sort(y+1,y+n+1,_c); sort(x+1,x+k+1,c_); sort(y+1,y+l+1,c_);//四次排序printf("%d",x[1].a);for(int i=2;i<=k;i++)printf(" %d",x[i].a);//輸出printf("\n%d",y[1].a);for(int i=2;i<=l;i++)printf(" %d",y[i].a);//一定要處理空格!!!我因為沒處理行末空格wrong了1次return 0; }
轉載于:https://www.cnblogs.com/LinqiongTaoist/p/7203756.html
總結
以上是生活随笔為你收集整理的【NOIP普及组】2016模拟考试(10.29)——排座椅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery-uploadifyv3.2
- 下一篇: parameter localparam