zoukankan      html  css  js  c++  java
  • Circle of Monsters CodeForces

    题目大意:有n个怪物,占成一个圈,然后每一一个怪物都有一定的生命值和爆破值,如果该怪物死了,那么会发生生爆炸会对下一个位置的怪物造成爆破值的伤害,没一发子弹可以打掉怪物1点生命值,问杀死这么多怪物,最少需要几发子弹。

    题解:每个怪物有3种死法,第一种直接被子弹打死,第二种,直接被炸死,第三种,没炸死,然后补了几下又死了。首先我们可以枚举i,就是先让哪个怪物与发爆炸。然后再考虑下一个怪物,即需要补几下才能死。然后就这么一直下去,但是这样是n^2的复杂度。该怎么优化呢?可以用一个数组c来优化,c[i]表示当第i个怪物需要补几枪才能死掉,然后再求一下和sum。然后再枚举i,那么答案就是sum+a[i]-c[i]。求一下最小值就可以了

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll inf=1e18+7;
    const ll N=300000+7;
    ll a[N],b[N];
    ll c[N];
    void solve(){
        ll n;
        cin>>n;
        for(ll i=1;i<=n;i++){
            cin>>a[i]>>b[i];
        }
        ll sum=0;
        for(ll i=1;i<=n;i++){
            if(i==1) c[i]=max((ll)0,a[1]-b[n]);
            else  c[i]=max((ll)0,a[i]-b[i-1]); 
            sum+=c[i];
        }
        ll ans=inf;
        for(ll i=1;i<=n;i++){
            ans=min(ans,sum+a[i]-c[i]);
        }
        cout<<ans<<endl;
    }
    
    int main(){
        ios::sync_with_stdio(0); 
        ll t;
        cin>>t;
        while(t--) solve();
        return 0;
    }
  • 相关阅读:
    T-SQL 关闭数据库所有连接
    单页web应用(SPA)的简单介绍
    ES6—解构赋值
    ES6 — 新增关键字let、const
    一行能装逼的JavaScript代码
    Date 对象总结
    JS从头开始
    CSS基础知识点(二)——居中
    web标准的可用性和可访问性
    CSS基础知识点(二)——选择器
  • 原文地址:https://www.cnblogs.com/Accepting/p/12802056.html
Copyright © 2011-2022 走看看