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-;
const double pi=acos(-1.0);
const int MOD=1e9+;
const int maxn=;
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=;i<=n;i++)
scanf("%s",s[i]+);
// for(int i=1;i<=n;i++)
// printf("%s\n",s[i]+1);
cnt=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(s[i][j]=='v')
{
if(j->)
{
if((s[i][j-]=='v'&&vis[i][j-]==false&&s[i-][j-]=='^'&&vis[i-][j-]==false))
{
cnt++;
vis[i][j]=true;vis[i][j-]=true;vis[i-][j-]=true;
}
}
if(s[i-][j-]=='^'&&s[i-][j+]=='^'&&vis[i-][j-]==false&&vis[i-][j+]==false)
{
cnt++;
vis[i][j]=true;vis[i-][j-]=true;vis[i-][j+]=true;
}
}
}
}
// printf("%d\n",cnt);
if(n<)
printf("%d\n",cnt);
else
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(s[i][j]=='<')
{
if(s[i-][j+]=='>'&&vis[i-][j+]==false&&s[i-][j]=='<'&&vis[i-][j]==false)
{
cnt++;
vis[i][j]=true;vis[i-][j+]=true;vis[i-][j]=true;
}
}
if(s[i][j]=='>')
{
if(s[i-][j-]=='<'&&vis[i-][j-]==false&&s[i-][j]=='>'&&vis[i-][j]==false)
{
cnt++;
vis[i][j]=true;vis[i-][j-]=true;vis[i-][j]=true;
}
}
}
}
printf("%d\n",cnt);
}
}
return ;
}
/**********************************************************************
Problem: 1361
User: HNCPCteam001
Language: C++
Result: AC
Time:528 ms
Memory:3996 kb
**********************************************************************/

2018湖南省第14届大学生计算机程序设计竞赛 D: 卖萌表情的更多相关文章

  1. 2018湖南省第14届大学生计算机程序设计竞赛 A字符画

    Description 读入 w,请输出 2018 的字符画,两个数字之间有 w 个空格.具体格式请参考样例输出. 1 ≤ w ≤ 2018 Input 输入文件只包含 1 个整数 w. Output ...

  2. 2018湖南省第14届大学生计算机程序设计竞赛 C: 时间旅行

    Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中. 当 Bobo 位于时间轴上 t 点,同时时间机器有 c 单位燃料时,他可以选择一个 ...

  3. 湖南省第十三届大学生计算机程序设计竞赛 Football Training Camp 贪心

    2007: Football Training Camp[原创-转载请说明] Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 1 ...

  4. csu 1503: 点弧之间的距离-湖南省第十届大学生计算机程序设计大赛

    这是--比量p并用交点连接中心不上弧.在于:它至p距离.是不是p与端点之间的最短距离 #include<iostream> #include<map> #include< ...

  5. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  6. CSUOJ1329——一行盒子_湖南省第九届大学生计算机程序设计竞赛

    题目是中文的我就不是说明了,比赛的时候看过题目后队友说是splay来做,细想来省赛不会出这么坑的题目吧. 于是比赛还有一个小时左右把该做的都做完了以后,我们队三个人都来思考这个题目了.不过还好很快我们 ...

  7. 湖南省第九届大学生计算机程序设计竞赛 Interesting Calculator

    Interesting Calculator Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 163  Solved: 49 Description T ...

  8. 【最短路】【数学】CSU 1806 Toll (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1806 题目大意: N个点M条有向边,给一个时间T(2≤n≤10,1≤m≤n(n-1), ...

  9. 希尔加密算法(湖南师范大学第六届大学生计算机程序设计竞赛)hnuoj11552

    解密 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 2, Accept ...

随机推荐

  1. org.springframework.web.struts.DelegatingActionProxy

    之前也不知道用的是哪个版本的spring jar 包,后来换了之后发现问题出来了, 00:08:00,364 ERROR RequestProcessor:296 - No action instan ...

  2. ASP.NET项目开发实战<<一键创建解决方案>>

    视频演示地址:http://www.youku.com/playlist_show/id_23192838.html 第一步:创建项目需要的数据库 打开辅助开发工具,如下图 从左侧菜单找到 项目数据库 ...

  3. 【413】C 语言 Command line

    Command-Line Arguments All the executable programs above have a main(void) program more generally, e ...

  4. Ruby模块与类

    Ruby是单一继承,一个类只能有一个直接的母类 Mix-in 模式来处理复合需求 多重包含: 由下往上回溯,重复的只看最上方的      换句话说,程序由上往下执行,由具体到抽象,第二次发现同一个模块 ...

  5. 洛谷 P3825 [NOI2017]游戏 【2-SAT+状压】

    UOJ和洛谷上能A,bzoj 8ms即WA,现在也不是知道为啥--因为我太弱了 先看数据范围发现d非常小,自然想到了状压. 所以先假装都是只能跑两种车的,这显然就是个2-SAT问题了:对于x场没有hx ...

  6. bzoj 3784: 树上的路径【点分治+st表+堆】

    参考:https://www.cnblogs.com/CQzhangyu/p/7071477.html 神奇的点分治序(或者叫点剖?).就是把点分治扫过的点依次放进队列里,然后发现,对于每一棵树摊到序 ...

  7. JavaScript 数组相关基础方法

    文章来源于:https://www.cnblogs.com/dolphinX/p/3353590.html 创建数组 构造函数 1.无参构造函数,创建一空数组 var a1=new Array(); ...

  8. .Net Framework Client Profile 和 .Net Framework的区别[转]

    原文链接 VS2010默认是以.Net Framework Client Profile为生成环境的,如果需要更多的功能,应该调用.Net Framework.

  9. .Net应用自定义鼠标样式

    (调用系统API的方法) 1.引用命名空间 using System.Runtime.InteropServices; 命名空间提供各种各样支持 COM 互操作 及平台调用服务的成员.using Sy ...

  10. [BZOJ1009][HNOI2008]GT考试 DP+矩阵快速幂+KMP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1009 我们令$dp(i,j)$表示已经填了$i$位,而且后缀与不幸运数字匹配了$j$位,那 ...