zoukankan      html  css  js  c++  java
  • CF1443B Saving the City

    传送门:https://codeforces.com/contest/1443/problem/B

    题意:

    一条路上埋着一些地雷,现在需要引爆这些地雷,引爆一个地雷花费a块钱,与它相邻的所有的地雷都会被引爆。埋一个地雷花费b块钱,求最小花费。

    题解:

    扫一遍不相邻的地雷群,它们之间相隔多少个位置,对于每个地雷群,判断一下直接炸了划算还是往里面填地雷和别的连起来划算。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    char mines[100005];
    struct List{
        int sum;
        //int next;
        int nextcost;
    }mapp[100005];
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int a,b;
            scanf("%d %d",&a,&b);
            scanf("%s",mines);
            int l=strlen(mines);
            memset(mapp,0,sizeof mapp);
            int k=0;
            for(int i=0;i<l;i++){
                if(mines[i]=='0'){
                    mapp[k].nextcost++;
                }else if(mines[i]=='1' && (mapp[k].nextcost>0 || i==0)){
                    //mapp[k].next=++k;
                    k++;
                    mapp[k].sum++;
                }else{
                    mapp[k].sum++;
                    ;
                }
            }
            int ans=0;
            for(int i=1;i<k;i++){
                if(mapp[i].sum>0)ans+=a;
                if(mapp[i].nextcost*b<a){
                    ans+=mapp[i].nextcost*b;
                    mapp[i+1].sum=0;
                }
            }
            if(mapp[k].sum>0)ans+=a;
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    HDU1266 Reverse Number
    codevs1380 没有上司的舞会
    codevs1163 访问艺术馆
    codevs2144 砝码称重 2
    codevs1553 互斥的数
    codevs1230 元素查找
    codevs3118 高精度练习之除法
    codevs1245 最小的N个和
    codevs1063 合并果子
    codevs1052 地鼠游戏
  • 原文地址:https://www.cnblogs.com/isakovsky/p/13964063.html
Copyright © 2011-2022 走看看