zoukankan      html  css  js  c++  java
  • 2018湖南省第14届大学生计算机程序设计竞赛 D: 卖萌表情

    Description

    已知以下 4 种都是卖萌表情(空白的部分可以是任意字符。竖线是便于展示的分隔符,没有实际意义):

    ^ ^ |  ^  | <  |  >
     v  | v v |  > | <
        |     | <  |  >

    给出 n 行 m 列的字符矩阵,Bobo 希望找出互不重叠的卖萌表情数量的最大值。互不重叠的意思是每个字符只属于至多一个卖萌表情。

    • 1 ≤ n, m ≤ 1000
    • 矩阵只包含 ^v<> 4 种字符。
    • n × m 的和不超过 2 × 106.

    Input

    输入文件包含多组数据,请处理到文件结束。

    每组数据的第一行包含 2 个整数 n 和 m.

    接下来 n 行的第 i 行包含长度为 m 的字符串,表示字符矩阵的第 i 行。

    Output

    对于每组数据输出 1 个整数表示互不重叠的卖萌表情数量的最大值。

    Sample Input

    2 4
    ^^^^
    >vv<
    2 4
    vvvv
    >^^<
    4 2
    v>
    <>
    <>
    ^>
    3 4
    ^>^>
    <v>v
    >>>>
    

    Sample Output

    2
    0
    2
    2

    思路:贪心,由图我们可以看出这个表情分为两种类型,那么对于前两种哪个表情优先级更高一些呢,你可以看图,虽然这个图有点迷,但是仔细看一下应该还是能懂的(尴尬脸),

    对于第二类的表情其实没啥区别,优先级一样。那么知道这些就很简单了。直接看代码吧。
    #include <iostream>
    #include <stdio.h>
    #include <string>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    #include <queue>
    #include <set>
    #include <stack>
    #include <vector>
    #include <deque>
    #include <list>
    using namespace std;
    typedef long long LL;
    const int INF=0x3f3f3f3f;
    const double eps=1e-8;
    const double pi=acos(-1.0);
    const int MOD=1e9+7;
    const int maxn=1005;
    int n,m,cnt;
    char s[maxn][maxn];
    bool vis[maxn][maxn];
    int main()
    {
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            memset(vis,false,sizeof(vis));
            for(int i=1;i<=n;i++)
                scanf("%s",s[i]+1);
    //        for(int i=1;i<=n;i++)
    //            printf("%s
    ",s[i]+1);
            cnt=0;
            for(int i=2;i<=n;i++)
            {
                for(int j=1;j<=m;j++)
                {
                    if(s[i][j]=='v')
                    {
                        if(j-2>0)
                        {
                            if((s[i][j-2]=='v'&&vis[i][j-2]==false&&s[i-1][j-1]=='^'&&vis[i-1][j-1]==false))
                            {
                                cnt++;
                                vis[i][j]=true;vis[i][j-2]=true;vis[i-1][j-1]=true;
                            }
                        }
                        if(s[i-1][j-1]=='^'&&s[i-1][j+1]=='^'&&vis[i-1][j-1]==false&&vis[i-1][j+1]==false)
                        {
                            cnt++;
                            vis[i][j]=true;vis[i-1][j-1]=true;vis[i-1][j+1]=true;
                        }
                    }
                }
            }
    //        printf("%d
    ",cnt);
            if(n<3)
                printf("%d
    ",cnt);
            else
            {
                for(int i=3;i<=n;i++)
                {
                    for(int j=1;j<=m;j++)
                    {
                        if(s[i][j]=='<')
                        {
                            if(s[i-1][j+1]=='>'&&vis[i-1][j+1]==false&&s[i-2][j]=='<'&&vis[i-2][j]==false)
                            {
                                cnt++;
                                vis[i][j]=true;vis[i-1][j+1]=true;vis[i-2][j]=true;
                            }
                        }
                        if(s[i][j]=='>')
                        {
                            if(s[i-1][j-1]=='<'&&vis[i-1][j-1]==false&&s[i-2][j]=='>'&&vis[i-2][j]==false)
                            {
                                cnt++;
                                vis[i][j]=true;vis[i-1][j-1]=true;vis[i-2][j]=true;
                            }
                        }
                    }
                }
                printf("%d
    ",cnt);
            }
        }
        return 0;
    }
    /**********************************************************************
        Problem: 1361
        User: HNCPCteam001
        Language: C++
        Result: AC
        Time:528 ms
        Memory:3996 kb
    **********************************************************************/
  • 相关阅读:
    文件处理
    字符编码
    基本数据类型及内置方法
    python语法入门之流程控制
    python语法入门之基本数据类型
    python语法入门之用户交互、运算符
    编程语言与Python介绍
    计算机核心基础
    图片验证码推导逻辑,Image.new,ImageDraw, ImageFont.truetype的用法
    VUEday01
  • 原文地址:https://www.cnblogs.com/jkzr/p/9601972.html
Copyright © 2011-2022 走看看