题解 P5613 【[MtOI2019]黑蚊子多】

· · 题解

真人面对面收割,美女角色在线掉分,发狂玩蛇新天地
                                                            ---Arcaea中文维基

以下是正文

可以考虑这么一张图

每次向上走 m 格,在其中有 k 个特殊平台,踩上去后后面每次向上走 m+1 格。

对于 60% 的数据,k = 0。

(upd:此处 \frac{n}{m} 应加上上取整)

那么要从底部到达顶部所需要的最小次数就是 \lceil \frac{n}{m} \rceil 次,只需要输出 \lceil \frac{n}{m} \rceil 即可得到此部分的分数。

对于 100% 的数据,1 ≤ m ≤ n ≤ 1000 ,k ≤ 10 。

```cpp #include <bits/stdc++.h> using namespace std; int n,m,k; int a[100000]; int main () { cin>>n>>m>>k; for(int i=1;i<=k;i++) { int in; cin>>in; a[in]=1;//存储特殊格子 } int ans=0; int t=0;//当前位置 while(true) { if(n-m<=0)//边界 { ans++;//即使剩余格子小于m 也还是需要走一次的 break; } n-=m;//剩余格子 t+=m;//当前位置 m+=a[t];//如果特殊为格子 m+=1 ans++; } cout<<ans; return 0; } ```