题意:

  一个画家画出一张,有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 3685

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 4428   Accepted: 1102 Descriptio ...

  2. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  3. POJ 2142 The Balance (解不定方程,找最小值)

    这题实际解不定方程:ax+by=c只不过题目要求我们解出的x和y 满足|x|+|y|最小,当|x|+|y|相同时,满足|ax|+|by|最小.首先用扩展欧几里德,很容易得出x和y的解.一开始不妨令a& ...

  4. C#中对象的输出

    假设有个Costmer类如下: class Costmer { public string Id { get; set; } public string City { get; set; } publ ...

  5. Node 出现 uncaughtException 之后的优雅退出方案

    Node 的异步特性是它最大的魅力,但是在带来便利的同时也带来了不少麻烦和坑,错误捕获就是一个.由于 Node 的异步特性,导致我们无法使用 try/catch 来捕获回调函数中的异常,例如: try ...

  6. sql server 2008 评估期已过期解决办法

    开始-->所有程序-->Microsoft SQL Server 2008-->配置工具-->SQL Server 安装中心-->维护-->版本升级,接着按照提示一 ...

  7. proc插入数据到数据库

    #include<stdio.h>EXEC SQL INCLUDE SQLCA; void insert (char password_[6],char id_[20],int balan ...

  8. iOS开发swift--函数

    函数返回值 ---函数 // 自加函数 func Add(num : Int)->Int{ } //自减函数 func zj(num : Int)->Int{ } //定义返回函数类型 f ...

  9. 做个简单的Android列表字母索引控件

    相信大家在许多App中都见到过带字母索引的界面,比如我最近看到的这个开源控件: WaveSideBar 很酷是不是?!!!如果加在例如联系人列表界面上,大大提升了用户体验. 那么这个索引控件要怎么做呢 ...

  10. HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)

    Seam Carving DescriptionFish likes to take photo with his friends. Several days ago, he found that s ...