2018百度之星初賽1003

2021-08-22 16:35:21 字數 1312 閱讀 8565

problem description

度度熊有一張紙條和一把剪刀。

紙條上依次寫著 n 個數字,數字只可能是 0 或者 1。

度度熊想在紙條上剪 k 刀(每一刀只能剪在數字和數字之間),這樣就形成了 k+1 段。

他再把這 k+1 段按一定的順序重新拼起來。

不同的剪和接的方案,可能會得到不同的結果。

度度熊好奇的是,字首 1 的數量最多能是多少。

input

有多組資料,讀到eof結束。

對於每一組資料,第一行讀入兩個數 n 和 k 。

第二行有乙個長度為 n 的字串,依次表示初始時紙條上的 n 個數。

0≤koutput

對於每一組資料,輸出乙個數,表示可能的最大字首 1 的數量。

sample input

5 1 11010 5 2 11010

sample output

2 3

source

思路:思路就是記錄掃一遍,記錄每個含有1的小段(需要記錄1的數量,和需要砍的刀數,起點座標,終點座標),然後依次列舉誰做第一段(只用1刀)+特判就行。

**:

#include #include #include #include #include #include #include #include #include #include #include typedef long long ll;

#define inf 0x3f3f3f3f

const int maxn=1e5+10;

const int maxn=1e3+10;

using namespace std;

int n,k;

char s[maxn];

struct point

p[maxn];

bool cmp(point a,point b)

int main(int argc, char const *argv)

scanf("%s",s);

int n=strlen(s);

int cnt=0;

int flag=0;

for(int i=0;i=g+p[i].cut)

}int ans2=0,g2=0;

int ans3=0;

if(p[0].l!=0)

}ans3=max(ans3,ans2);}}

printf("%d\n",max(ans,ans3));

}return 0;

}

百度之星2018初賽A輪

題目描述 題解 簽到題。排個序列舉小的兩條然後二分出第三條就好了。其實排序之後只要看連續的三條就行了。include define n 1005 using namespace std int n,s n ans int main printf d n ans return 0 題解 當時腦子抽了寫...

2018百度之星初賽 A 1002

度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面 2 u w 詢問編號為 u 的佇列裡的某...

2018 「百度之星」程式設計大賽 初賽(A)

第二題還算手穩 手快?最後勉強擠進前五百 期間看著自己從兩百多掉到494名 1001 度度熊拼三角 hdoj 6374 簽到題 題意 給n根木棒 求可以拼出的周長最長的三角形 可以用貪心的思想做 對所有的木棒長度進行排序 取最長的三根進行判斷是否可以組成三角形 若不能 捨去最長的一根 每次都選擇相鄰...