Codeforces Round #191 (Div. 2) D. Block Tower
2 seconds
256 megabytes
standard input
standard output
After too much playing on paper, Iahub has switched to computer games. The game he plays is called "Block Towers". It is played in a rectangular grid with n rows
and m columns (it contains n × m cells).
The goal of the game is to build your own city. Some cells in the grid are big holes, where Iahub can't build any building. The rest of cells are empty. In some empty cell Iahub can build exactly one tower of two following types:
- Blue towers. Each has population limit equal to 100.
- Red towers. Each has population limit equal to 200. However, it can be built in some cell only if in that moment at least one of the neighbouring cells
has a Blue Tower. Two cells are neighbours is they share a side.
Iahub is also allowed to destroy a building from any cell. He can do this operation as much as he wants. After destroying a building, the other buildings are not influenced, and the destroyed cell becomes empty (so Iahub can build a tower in this cell if needed,
see the second example for such a case).
Iahub can convince as many population as he wants to come into his city. So he needs to configure his city to allow maximum population possible. Therefore he should find a sequence of operations that builds the city in an optimal way, so that total population
limit is as large as possible.
He says he's the best at this game, but he doesn't have the optimal solution. Write a program that calculates the optimal one, to show him that he's not as good as he thinks.
The first line of the input contains two integers n and m (1 ≤ n, m ≤ 500).
Each of the next n lines contains m characters,
describing the grid. The j-th character in the i-th
line is '.' if you're allowed to build at the cell with coordinates (i, j) a
tower (empty cell) or '#' if there is a big hole there.
Print an integer k in the first line (0 ≤ k ≤ 106) —
the number of operations Iahub should perform to obtain optimal result.
Each of the following k lines must contain a single operation in the following format:
- «B x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) —
building a blue tower at the cell (x, y); - «R x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) —
building a red tower at the cell (x, y); - «D x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) —
destroying a tower at the cell (x, y).
If there are multiple solutions you can output any of them. Note, that you shouldn't minimize the number of operations.
2 3
..#
.#.
4
B 1 1
R 1 2
R 2 1
B 2 3
1 3
...
5
B 1 1
B 1 2
R 1 3
D 1 2
R 1 2
在 ' . ' 上建造房子,蓝色容纳100人。红色容纳200人,在106
步数以内建造尽可能大的容纳量,可是在建造红色房子时,与它相邻的必须有蓝色房子。
思路:先将全部建成蓝色。图最大是500*500,假设三种步骤都进行是3*500*500,不会超过106
题目并没有要求步骤尽量少。仅仅须要满足容纳量尽量多就可以,所以
所有建成蓝色后。再从边界開始改建成红色,因此DFS就可以完毕。
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#define N 600
using namespace std; char s[N][N];
int vis[N][N]; struct Node
{
char a;
int x,y;
}f[1000009]; int n,m;
int num; int fun(char c,int x,int y)
{
s[x][y]=c;
num++;
f[num].a=c;
f[num].x=x;
f[num].y=y; } void dfs(int x,int y)
{
if(s[x][y]!='B' || vis[x][y] ) return;//假设是'#'或者已经被改造 vis[x][y]=1; if(y>1) dfs(x,y-1);
if(x>1) dfs(x-1,y);
if(y<m) dfs(x,y+1);
if(x<n) dfs(x+1,y); fun('D',x,y);
fun('R',x,y);
return;
} int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
scanf("%s",s[i]+1); memset(vis,0,sizeof vis);
num=0; for(int i=1;i<=n;i++)//先所有建成’B'
for(int j=1;j<=m;j++)
{
if(s[i][j]=='.')
fun('B',i,j);
} for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(s[i][j]=='B')
{
vis[i][j]=1; if(j>1) dfs(i,j-1);
if(i>1) dfs(i-1,j);
if(j<m) dfs(i,j+1);
if(i<n) dfs(i+1,j); }
} printf("%d\n",num);
for(int i=1;i<=num;i++)
{
printf("%c %d %d\n",f[i].a,f[i].x,f[i].y);
} }
return 0;
}
Codeforces Round #191 (Div. 2) D. Block Tower的更多相关文章
- 贪心 Codeforces Round #191 (Div. 2) A. Flipping Game
题目传送门 /* 贪心:暴力贪心水水 */ #include <cstdio> #include <algorithm> #include <cstring> us ...
- Codeforces Round #191 (Div. 2)
在div 188中,幸运的达成了这学期的一个目标:CF1800+,所以这次可以打星去做div2,有点爽. A.Flipping Game 直接枚举 B. Hungry Sequence 由于素数的分布 ...
- codeforces水题100道 第二十题 Codeforces Round #191 (Div. 2) A. Flipping Game (brute force)
题目链接:http://www.codeforces.com/problemset/problem/327/A题意:你现在有n张牌,这些派一面是0,另一面是1.编号从1到n,你需要翻转[i,j]区间的 ...
- Codeforces Round #191 (Div. 2) E题
状态压缩DP,算sum,本来是枚举的,结果TLE了.. #include <iostream> #include <cstring> #include <cstdio&g ...
- Codeforces Round #191 (Div. 2)---A. Flipping Game
Flipping Game time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Codeforces Round #191 (Div. 2) B. Hungry Sequence(素数筛选法)
. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Codeforces Round #191 (Div. 2) A. Flipping Game(简单)
A. Flipping Game time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Codeforces Round #191 (Div. 2) A. Flipping Game【*枚举/DP/每次操作可将区间[i,j](1=<i<=j<=n)内牌的状态翻转(即0变1,1变0),求一次翻转操作后,1的个数尽量多】
A. Flipping Game time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #578 (Div. 2)
Codeforces Round #578 (Div. 2) 传送门 A. Hotelier 暴力即可. Code #include <bits/stdc++.h> using names ...
随机推荐
- VC调试技巧
Visual C++ 的 C 运行时刻函数库标识模板0xCD 已经分配的数据(alloCated Data)0xDD 已经释放的数据(Deleted Data)0xFD 被保护的数据 ...
- codeforces.com/contest/325/problem/B
http://codeforces.com/contest/325/problem/B B. Stadium and Games time limit per test 1 second memory ...
- Delphi5 update1的序列号
好不容易找到一个: Serial Number: 100-006-1659Key: 6ax0-91x0 ------------------------------------------- 办法2: ...
- ThinkPHP页面跳转、Ajax技巧详细介绍(十八)
原文:ThinkPHP页面跳转.Ajax技巧详细介绍(十八) ThinkPHP页面跳转.Ajax技巧详细介绍 一.页面跳转 $this->success('查询成功',U('User/test' ...
- UVA 10245 The Closest Pair Problem 最近点问题 分治算法
题意,给出n个点的坐标,找出两点间最近的距离,如果小于10000就输出INFINITY. 纯暴力是会超时的,所以得另辟蹊径,用分治算法. 递归思路将点按坐标排序后,分成两块处理,最近的距离不是在两块中 ...
- Eclipse下Android编程代码自动提示
在用Eclipse进行Android编程,为了代码自动提示,需要进行如下操作: 1.设置 java 文件的代码提示功能 打 开 Eclipse 依次选择 Window > Preferences ...
- leetcode回文子串拆分-最小拆分次数
转载请注明来自souldak,微博:@evagle 上一篇是要输出所有的可能拆分,这回是要输出拆分次数最少的切割次数. 如果直接按照上一篇那么做的话,就会超时,因为我们在判断s[i][j]是否是回文的 ...
- 日交易41.9亿,B2B的魅力为何不输于B2C、C2C?
在最近两年的电子商务版图中,B2C和C2C可谓大放异彩,相比之下,B2B却显得颇为“低调”,当然,低调并不代表没有影响力,只不过,相比B2C和C2C面向数亿网民而言,B2B只针对企业和商家服务 ...
- hdu2063+hdu1083(最大匹配数)
传送门:hdu2063过山车 #include <cstdio> #include <cstring> #include <string> #include < ...
- 使用CXF创建REST WEBSERVICE
简单小结下CXF跟REST搭配webservice的做法,直接举代码为样例: 1 order.java package com.example.rest; import javax.xml.bin ...