【Usaco2014Open银组】照相(pairphoto)
Description
FJ 的N 頭奶牛(2 <=N <=100, 000),分別站在一維籬笆上的許多地方。第i頭奶牛站在坐標xi(0 <=xi <= 1, 000, 000, 000),是純白色奶牛或者花斑奶牛。沒有兩頭奶牛占據同樣的位置,并且有至少一頭白色奶牛。
為了郡交易會,FJ 想要給連續一段籬笆上的奶牛拍照。但是,為了對每種牛公平,他想要確保照片里白色奶牛和花斑奶牛的數量一樣。一張照片的尺寸為照片里奶牛的最大坐標與最小坐標之差。FJ 想要知道所有公平的照片中,最大的尺寸有多大。
為了讓他有更大的機會得到大一點的照片,FJ 拿來了一桶顏料,可以將任意數量的白色奶牛畫成花斑奶牛。請幫助FJ 找到他能使用顏料的情況下所拍的公平照片的最大尺寸(當然,如果他認為保持原樣更好的話,那么他不會使用顏料)。
Input
第一行:整數N。
第2 到N + 1 行:第i + 1 行包含xi 和字符‘W’ (一頭白色奶牛)或字符‘S’ (一頭花斑奶牛)。
Output
輸出單獨一行一個整數,在FJ 潑顏料之后他能拍到的公平照片的最大尺寸。
Sample Input
5
8 W
11 S
3 W
10 W
5 S
Sample Output
7
【樣例解釋】
FJ 將從坐標3 到坐標10 的奶牛拍成一張照片。這個范圍內有4 頭奶牛——3 頭白色的和一頭花斑的——所以他需要把其中任意一頭白色奶牛畫上花斑。
Data Constraint
對于10% 的數據,是題目的饋贈。
對于20% 的數據,N <=100。
對于30% 的數據,N <=1000。
對于40% 的數據,N <=20000。
對于所有數據,2 <=N <=100, 000,保證FJ 能拍到公平的照片。
.
.
.
.
.
.
.
分析
先對輸入按照P值排序,然后令W=-1 S=1,開一個F數組記錄前i頭牛中,白色牛減去斑點牛的數量,最后統計答案。
.
.
.
.
.
.
.
.
程序:
uses math; var n,ans,m,i:longint; ch:char; b,a,f:array[0..1000001]of longint; procedure px(l,r:longint); var w,i,j,mid:longint; beginif l>=r then exit;i:=l;j:=r;mid:=a[(i+j) div 2];repeatwhile a[i]<mid do inc(i);while a[j]>mid do dec(j);if i<=j thenbeginw:=a[i];a[i]:=a[j];a[j]:=w;w:=b[i];b[i]:=b[j];b[j]:=w;inc(i);dec(j);end;until i>j;px(l,j);px(i,r); end;beginassign(input,'pairphoto.in');reset(input);assign(output,'pairphoto.out');rewrite(output);readln(n);for i:=1 to n dobeginread(a[i]);read(ch);readln(ch);if ch='W' then b[i]:=-1 else b[i]:=1;end;px(1,n);fillchar(f,sizeof(f),127);m:=n;f[m]:=a[1];for i:=2 to n dobeginm:=m+b[i-1];f[m]:=min(f[m],a[i]);end;for i:=2*n downto 0 dof[i]:=min(f[i],f[i+2]);m:=n;for i:=1 to n dobeginm:=m+b[i];ans:=max(ans,a[i]-f[m]);end;write(ans);close(input);close(output); end.轉載于:https://www.cnblogs.com/YYC-0304/p/9499985.html
總結
以上是生活随笔為你收集整理的【Usaco2014Open银组】照相(pairphoto)的全部內容,希望文章能夠幫你解決所遇到的問題。