題目描述
教室有M行N列,坐在第i行第j列的同學的位置是(i,j),為了方便同學們進出,在教室中設置了K條橫向的通道,L條縱向的通道。如果一條通道隔開了兩個會交頭接耳的同學,那么他們就不會交頭接耳了。樣例輸入
4 5 1 2 34 2 4 32 3 3 32 5 2 4樣例輸出
22 4思路
O(2nm^2)把每行每列的同學對數記錄下來,貪心。var x,y,s:array[1..2000] of longint; a:array[1..2000,1..4] of longint; m,n,k,l,d,i,j,t:longint;function min(x,y:longint):longint;begin if x<y then min:=x else min:=y;end;begin readln(m,n,k,l,d); for i:= 1 to d do begin read(a[i,1],a[i,2],a[i,3],a[i,4]); if a[i,1]=a[i,3] then inc(x[min(a[i,2],a[i,4])]) else inc(y[min(a[i,1],a[i,3])]); end; for i:= 1 to m do if y[i]>0 then begin inc(j); s[j]:=y[i]; end; for i:=1 to j-1 do for j:=i+1 to j do if s[i]<s[j] then begin t:=s[i];s[i]:=s[j];s[j]:=t;end; for i:=1 to m do if y[i]>=s[k] then write(i,' '); writeln; j:=0; fillchar(s,sizeof(s),0); for i:= 1 to n do if x[i]>0 then begin inc(j); s[j]:=x[i]; end; for i:=1 to j-1 do for j:=i+1 to j do if s[i]<s[j] then begin t:=s[i];s[i]:=s[j];s[j]:=t;end; for i:=1 to m do if x[i]>=s[l] then write(i,' ');end.