zoukankan      html  css  js  c++  java
  • 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] D】Single-use Stones

    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    设长度为L的所有区间里面,石头的个数的最小值为k 设取到k的区间为l,r

    那么k就为最多能通过的青蛙个数。

    假设k再大一点。比如为k+1
    那么所有的k+1只青蛙,
    肯定会在某个时刻都落在l,r这个长度为L的区间
    (无法直接跳过这个区间)

    但是这个区间只有k个石头。
    所以k+1只肯定有一只无法通过。

    所以最多只能为k只青蛙。

    然后再考虑方案问题
    因为我们k获取的方式。
    所以每个长度为l的区间都至少有k个石头。
    那么这k只青蛙显然每次跳都可以不用重复踩石头通过。
    (第i只青蛙一开始跳到第i个石头上,然后接下来,每次都跳到接下来的第k个石头上,这样就不会重复走石头了)

    所以这k只青蛙都能到另外一边,且k是最大的。

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define all(x) x.begin(),x.end()
    #define pb push_back
    #define lson l,mid,rt<<1
    #define rson mid+1,r,rt<<1|1
    using namespace std;
    
    const double pi = acos(-1);
    const int dx[4] = {0,0,1,-1};
    const int dy[4] = {1,-1,0,0};
    
    const int N = 1e5;
    
    int w,l,a[N+10];
    
    int main(){
    	#ifdef LOCAL_DEFINE
    	    freopen("rush_in.txt", "r", stdin);
    	#endif
    	ios::sync_with_stdio(0),cin.tie(0);
        cin >> w >> l;
        rep1(i,1,w-1){
            cin >> a[i];
            a[i]+=a[i-1];
        }
        a[w]+=a[w-1]+1;
        //x[i+k]-x[i]<=l
        //i
    
        int ans = 1e9+7;
        for (int i = l;i<w;i++){
            ans = min(ans,a[i]-a[i-l]);
        }
        cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
    bzoj 3566: [SHOI2014]概率充电器【树形概率dp】
    bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】
    【04】在 PR 中关闭 issue
    【03】代码格式化+高亮
    【02】粘贴图像
    【01】在 Github 上编辑代码
    【02】GitHub 工具 Octotree
    【01】恶趣味玩转 GitHub commit 历史记录
    【07】Firebug监控网络情况
  • 原文地址:https://www.cnblogs.com/AWCXV/p/8955855.html
Copyright © 2011-2022 走看看