B.采矿时间到!

获得木头

https://ac.nowcoder.com/acm/contest/81126/A

B.采矿时间到!

简单的模拟一下

挖矿策略

临近矿道优先 每个消耗体力*1

远离矿道时

  1. 先处理临近矿道处被挖掉的 每个消耗体力*1
  2. 再处理临近矿道处未被挖掉的 每个消耗体力*2

如果体力不足以继续模拟直接停止

时间复杂度O(n)

#include<iostream>
using namespace std;
int n,h;
char a[6][1010];
int main(){
    cin>>n>>h;
    for(int i=1;i<=5;++i){
        cin>>(a[i]+1);
    }
    if(h==0){
        cout<<0<<endl;
        return 0;
    }
    int ans=0;
    for(int i=1;i<=n;++i){//临近矿道
        if(a[2][i]=='*'){
            h--;//消耗体力
            a[2][i]='.';//挖掉
            ans++;//计数
            if(h==0)break;//体力不足
        }
        if(a[4][i]=='*'){
            h--;
            a[4][i]='.';
            ans++;
            if(h==0)break;
        }
    }
    if(h)//体力充足
    for(int i=1;i<=n;++i){//远离矿道 临近矿道处被挖掉
        if(a[2][i]=='.'&&a[1][i]=='*'){
            h--;
            a[1][i]='.';
            ans++;
            if(h==0)break;
        }
        if(a[4][i]=='.'&&a[5][i]=='*'){
            h--;
            a[5][i]='.';
            ans++;
            if(h==0)break;
        }
    }
    if(h>=2)
    for(int i=1;i<=n;++i){//远离矿道 临近矿道处未被挖掉
        if(a[1][i]=='*'){
            ans++;
            h-=2;
            a[1][i]='.';
            if(h<2)break;
        }
        if(a[5][i]=='*'){
            ans++;
            h-=2;
            a[5][i]='.';
            if(h<2)break;
        }
    }
    cout<<ans<<endl;
}
全部评论
😘
点赞
送花
回复 分享
发布于 04-28 21:22 河南

相关推荐

5 收藏 评论
分享
牛客网
牛客企业服务