NBUT[1019]: 拔樹
阿新 • • 發佈:2018-11-30
https://ac.2333.moe/Problem/view.xhtml?id=1019
- 問題描述
-
雖然這不是一個好榜樣,但是為了留下足夠的空隙,XadillaX還是決定去拔掉一些樹。
這些樹是整齊地排成一排,用"|"表示,中間的空隙用空格" "表示,首和尾肯定是一棵樹。一個空格代表一個單位的空格。
現在讓你拔掉一定數量的樹,使新的佇列中最大的那個空隙最大。(忽略樹本身的空隙,如果兩棵樹是緊挨著的,那麼拔掉之後的空隙也是0)
如
| || | |
這麼個排列,如果讓你拔掉兩棵樹,那麼最大空隙是2,即
| | |或者| | |
- 輸入
-
本題有多組資料,輸入到EOF結束。
每組資料第一行一個正整數N(1 <= N <= 1000),代表需要拔掉的樹的數量。
接下去一行為樹的排列順序,僅包含"|"和" ",長度不超過10000。N不會超過樹的數量減2的。 - 輸出
-
對於每組資料,輸出拔樹之後的最大空隙。
- 樣例輸入
-
2 | | | | |
- 樣例輸出
-
4
判斷 i 到 j 之間有多少樹和空,更新答案。
#include<stdio.h> #include<string.h> #define N 10020 char str[N]; int maxn(int a,int b) { return a>b?a:b; } int main() { int m,i,j,ans,len,sum; while(scanf("%d",&m)!=EOF) { getchar(); gets(str); len=strlen(str); sum=0; ans=0; for(i=0;i<len;i++) if(str[i]!='|') break; for(j=i;j<len&&i<len;j++) { if(str[j]=='|') sum++; while(sum>m) { if(str[i]=='|') sum--; i++; } if(str[j]=='|') ans=maxn(ans,j-i-sum-1); else ans=maxn(ans,j-i-sum+1); } printf("%d\n",ans); } return 0; }