题意:

  一个画家画出一张,有3种颜色的笔,R、G、B。R看成'\',B看成'/',G看成这两种的重叠(即叉形)。给的是一个矩阵,矩阵中只有4种符号,除了3种颜色还有'.',代表没有涂色。问最小耗费多少笔即可画成这副图?

思路:

  最小耗费就是斜着的可以一笔搞定,但是如果中间隔着'.'或者其他一种形状,则不能一笔,要变两笔。主要麻烦在矩阵不是正方形,而可能是长方形。其实只要按照其画法,从左上往右下方向画,逐个条斜线扫描即可。另一个方向'/'也是如此。

  我看到模拟本来就不想敲,扫两遍矩阵,用了vector将他们每一条可能可以一笔画的线先装起来,再进行扫vector进行统计。哎~其实可以直接扫两矩阵就统计的,就是懒。

#include <bits/stdc++.h>
using namespace std;
const int N=; char grid[N][N];
int n;
vector<int> R[N], B[N]; int cal(int col)
{
int cnt=;
for(int i=; i<=n; i++)//一个方向
{
for(int j=; j<=col; j++)
{
if(grid[i][j]=='R'||grid[i][j]=='G')
{
if(i>j) R[i-j].push_back();
else if(i<j) R[j-i+].push_back();
else R[].push_back();
}
else
{
if(i>j) R[i-j].push_back();
else if(i<j) R[j-i+].push_back();
else R[].push_back();
}
}
} for(int i=; i<N; i++)
{
int flag=;
for(int j=; j<R[i].size(); j++)
{
if(!flag && R[i][j]==)
{
cnt++;
flag=;
}
if(!R[i][j]) flag=;
}
} for(int i=; i<=n; i++)//另一方向
{
for(int j=col,k=; j>=; j--,k++)
{
if(grid[i][j]=='B'||grid[i][j]=='G')
{
if(i>k) B[i-k].push_back();
else if(i<k) B[k-i+].push_back();
else B[].push_back();
}
else
{
if(i>k) B[i-k].push_back();
else if(i<k) B[k-i+].push_back();
else B[].push_back();
}
}
} for(int i=; i<N; i++)
{ int flag=;
for(int j=; j<B[i].size(); j++)
{
if(!flag && B[i][j])
{
cnt++;
flag=;
}
if(!B[i][j]) flag=;
}
} return cnt;
} int main()
{
//freopen("input.txt", "r", stdin);
int t;
cin>>t;
while(t--)
{
scanf("%d",&n);
for(int i=; i<N; i++) R[i].clear(),B[i].clear(); for(int i=; i<=n; i++) scanf("%s", grid[i]+);
printf("%d\n",cal( strlen( grid[]+ ) ));
}
return ;
}

AC代码

HDU 5319 Painter (模拟)的更多相关文章

  1. hdu 5319 Painter(杭电多校赛第三场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 Painter Time Limit: 2000/1000 MS (Java/Others)   ...

  2. hdoj 5319 Painter(模拟题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 思路分析:假设颜色R表示为1,颜色B表示为2,颜色G表示为3,因为数据量较小,采用暴力解法即可, ...

  3. HDU 5319 Painter(枚举)

    Painter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  4. HDU 5319 Painter

    题意:红色从左上向右下涂,蓝色从右上向左下涂,既涂红色又涂蓝色就变成绿色,问最少涂几下能变成给的图. 解法:模拟一下就好了,注意细节. 代码: #include<stdio.h> #inc ...

  5. 模拟+思维 HDOJ 5319 Painter

    题目传送门 /* 题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次 模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最 ...

  6. HDU 4121 Xiangqi 模拟题

    Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...

  7. hdu 5071 Chat(模拟)

    题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...

  8. hdu 4740【模拟+深搜】.cpp

    题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...

  9. HDU 2568[前进]模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2568 关键思想:傻傻地模拟 代码如下: #include<iostream> using ...

随机推荐

  1. POJ 1222

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6196   Accepted: 40 ...

  2. Android的事件处理机制详解(二)-----基于监听的事件处理机制

    基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...

  3. 10个最佳的网站和App开发工具

    这个世界充满了创新,开发的激情和决心是实现更高目标的关键因素.在网站开发中,毫无疑问,工具和可用的在线网页和 app 设计资源,发挥了重要的作用. 下面我们将带来一些网站和 app 的最佳工具.   ...

  4. PLSQL:plsql中文乱码,显示问号

    PLSQL执行sql语句,不识别中文,输出的中文标题显示成问号???? 1. 登陆plsql,执行sql语句,输出的中文标题显示成问号????:条件包含中文,则无数据输出

  5. const以及入栈出栈

    #include "stdafx.h"#include <iostream>using namespace std; class StringStack{ enum{s ...

  6. PushBackInputStream与PushBackInputStreamReader的用法

    举个例子:获取XX内容 PushBackInputStream pb=new PushBackInputStream(in,4);//4制定缓冲区大小 byte[] buf=new byte[4]; ...

  7. ios开发中超简单抽屉效果(MMDrawerController)的实现

    ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例. 首先需要给工程添加第三方类库 MMDrawerController: 这 ...

  8. Gray code---hdu5375(格雷码与二进制码,普通dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题意就是:给你一串二进制码,里面可能含有'?'这个既可以表示0又可以表示1, 让我们把这个二进制 ...

  9. 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符

    [重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符   1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...

  10. Tomcat常见内存溢出的解决办法

    PermGen space错误解决方法 在看下文之前,首先要确认意见事情,就是你是如何启动tomcat的,我们在平时的开发环境当中,都是通过startup.bat方式启动tomcat的,那么你按照下面 ...