稻草人 贪心

稻草人 Time Limit:2000MS    Memory Limit:32768KB    64bit IO Format:%lld & %llu

Description

Tom拥有一个非常长的田地。他计划在即将到来的生长季节种植不同类型的作物。然而,田地周围有很多乌鸦,Tom担心农作物会被这些乌鸦吃掉。为此,他决定把一些稻草人在场上的不同位置。
 
该田地可以被看成为一个1×n的网格。该田地的一些地区土壤是十分贫瘠的,这意味着你不能在这里种植任何作物。一个稻草人,放置在一个网格中,他会对包括自己所在的的网格以及左右两边相邻的网格进行保护。
 
Tom把他的田地情况展示给你,他想知道最少需要多少个稻草人能够使全部能够种植的田地都受到保护?

Input

输入开始的一个整数T(≤50),表示测试用例的数目。
每一个样例开始于一个包含一个整数n(0 < n < 100)的行。下一行包含描述字段的n个字符。一个点(.)表示作物生长点和散列(# )表示一个贫瘠的地区。

Output

对于每一个样例,打印"Case i: "(i为样例的序号)和需要放置稻草人的数量。如输出样例所示。

Sample Input

3

3

.#.

11

...##....##

2

##

Sample Output

Case 1: 1

Case 2: 3

Case 3: 0



我看网上那个的代码说都是贪心,然而自己连贪心是什么都不知道,一个水题,结果硬生生的被自己做了不知道几个小时。。。。


AC代码:


#include<iostream>
#include<queue>
#include<stack>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define MAX 105
#define inf 99999999
using namespace std;
int t,n;
char len[MAX];
int book[MAX];
int main()
{
    int nn=0;
    scanf("%d",&t);
    while(t--)
    {
        int ans=0;
        memset(book,0,sizeof(book));
        scanf("%d",&n);
        scanf("%s",len);
        for(int i=0;i<n;i++)
        {
            if(book[i] || len[i]=='#')
                continue;
            book[i]=book[i+1]=book[i+2]=1;
            ans++;
            i+=2;
        }
        printf("Case %d: %d\n",++nn,ans);
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值