KickStart-RoundH-ProblemB-Mural

5 篇文章 0 订阅
5 篇文章 0 订阅

题目链接

题目大意:小明要在连续的N面墙上画画,每面墙画好之后都能得到相应的分数,但是由于天气不好有洪水,每天都会毁掉一面墙,因此小明找找出能得到最高分数的画画方案。
注:小明第一次画画时可以随意选择一面墙开始,但是接下来的每一天,他只能画他已画过的部分旁边的新部分。在每一天结束的时候,洪水都会毁掉一面墙,这面墙是没有被画过的且是两头(就是墙的头或者尾部),因为小明用的是防水涂料所以已经画过的部分不会被冲掉。


解题思路:
能画的墙的长度为N/2(取大,即不小于N的最小整数,如3/2=1.5,则取2),无论如何,只要选取了长度为N/2的墙部分,总有办法能把它画完,因此,取窗口大小为N/2的窗口,遍历所有墙面,分数和最大的窗口就是答案。

#include <iostream>

using namespace std;

int wallScore[10000005];
int score(float N,string wall,int NO){
    int low=0,high=int(N/2+0.5)-1,MAX=0;
    for(int i=0;i<N;i++){
        wallScore[i]=wall[i]-48;
    }
    int sum=0;
    for(int j=low;j<=high;j++){
            sum+=wallScore[j];
    }
    while(high<N){
        if(sum>MAX){ MAX=sum; }
        sum=sum-wallScore[low];
        ++low;
        ++high;
        sum=sum+wallScore[high];
    }
    cout<<"Case #"<<NO<<": "<<MAX<<endl;
    return 0;
}

int main()
{
    int T;
    float N;
    string wall;
    cin>>T;
    for(int i=1;i<=T;i++){
        cin>>N>>wall;
        score(N,wall,i);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值