Portal:http://codeforces.com/problemset/problem/327/D

一座红塔200人,一座蓝塔100人,只有与蓝塔相邻才可以建红塔。

'.'处可建塔 '#'处不可建塔

可以随便毁塔

在建造能够容纳最多人数的塔集合情况下,输出对塔的操作(SPJ)

这是一道水题

这是一道卡输入输出的题

DFS就好,反正就是在联通分量里炸割顶留根

 #include<iostream>
#include<algorithm>
#include<set>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define FORD(i,j,k) for(int i=j;i>=k;i--)
#define LL long long
#define SZ(x) int(x.size())
#define maxm 510
#define maxn 510
string x;
int dx[]={,,-,};
int dy[]={,,,-};
int m,n,sum;
vector<char> al;
vector<int> ax,ay;
char ii[maxm][maxn];
int a[maxm][maxn],vis[maxm][maxn],col[maxm][maxn];
bool cr(int xx,int yy)
{
FOR(i,,)
if(xx+dx[i]>&&xx+dx[i]<=m&&yy+dy[i]>&&yy+dy[i]<=n)
if(col[xx+dx[i]][yy+dy[i]]==) return true;
return false;
}
void dfs(int x,int y)
{
vis[x][y]=;
/*if(cr(x,y)) {al.push_back('R');ax.push_back(x);ay.push_back(y);col[x][y]=2;sum++;}
else */{al.push_back('B');ax.push_back(x);ay.push_back(y);col[x][y]=;sum++;}
FOR(i,,)
if(x+dx[i]>&&x+dx[i]<=m&&y+dy[i]>&&y+dy[i]<=n)
if(a[x+dx[i]][y+dy[i]]) if(!vis[x+dx[i]][y+dy[i]]) dfs(x+dx[i],y+dy[i]);
if(col[x][y]==) if(cr(x,y)) { al.push_back('D');ax.push_back(x);ay.push_back(y);
al.push_back('R');ax.push_back(x);ay.push_back(y);col[x][y]=;sum+=;}
}
int main()
{
cin>>m>>n;
FOR(i,,m)
{scanf("%s",&ii[i][]);
FOR(j,,n)
{
a[i][j]=(ii[i][j]=='.');
}
}
FOR(i,,m)
FOR(j,,n)
if(a[i][j]&&!vis[i][j]) dfs(i,j);
cout<<sum<<endl;
FOR(i,,SZ(al)-)
printf("%c %d %d\n",al[i],ax[i],ay[i]);
return ;
}

特别丑的原代码(AC)

 #include<iostream>
#include<algorithm>
#include<set>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<sstream>
using namespace std;
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define FORD(i,j,k) for(int i=j;i>=k;i--)
#define LL long long
#define SZ(x) int(x.size())
#define maxm 510
#define maxn 510
char x;
stringstream ans;
int dx[]={,,-,};
int dy[]={,,,-};
int m,n,sum;
char ii[maxm][maxn];
int a[maxm][maxn],vis[maxm][maxn],col[maxm][maxn];
bool cr(int xx,int yy)
{
FOR(i,,)
if(xx+dx[i]>&&xx+dx[i]<=m&&yy+dy[i]>&&yy+dy[i]<=n)
if(col[xx+dx[i]][yy+dy[i]]==) return true;
return false;
}
void dfs(int x,int y)
{
vis[x][y]=;
ans<<"B "<<x<<' '<<y<<"\n";col[x][y]=;sum++;
FOR(i,,)
if(x+dx[i]>&&x+dx[i]<=m&&y+dy[i]>&&y+dy[i]<=n)
if(a[x+dx[i]][y+dy[i]]) if(!vis[x+dx[i]][y+dy[i]]) dfs(x+dx[i],y+dy[i]);
if(col[x][y]==) if(cr(x,y)) { ans<<"D "<<x<<' '<<y<<"\n";
ans<<"R "<<x<<' '<<y<<"\n";col[x][y]=;sum+=;}
}
int main()
{
cin>>m>>n;
FOR(i,,m)
FOR(j,,n)
{
cin>>x;
a[i][j]=(x=='.');
}
FOR(i,,m)
FOR(j,,n)
if(a[i][j]&&!vis[i][j]) dfs(i,j);
cout<<sum<<endl;
cout<<ans.str();
return ;
}

改后依然很丑的代码

输出黑科技sstream orz

#include<sstream> x;
x<<.....;
cout<<x.str();

输入黑科技

scanf("%s",&string[i][]);

CoderForces 327D Block Tower的更多相关文章

  1. CF 327D - Block Tower 数学题 DFS 初看很难,想通了就感觉很简单

    D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  2. CodeForces - 327D Block Tower

    D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  3. Codeforces Round #191 (Div. 2) D. Block Tower

    D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  4. 2013/7/16 HNU_训练赛4

    CF328B Sheldon and Ice Pieces 题意:给定一个数字序列,问后面的数字元素能够组成最多的组数. 分析:把2和5,6和9看作是一个元素,然后求出一个最小的组数就可以了. #in ...

  5. CF 191 总结

    A. Flipping Game 链接:http://codeforces.com/contest/327/problem/A 题意:从 i 到 j 翻转一次使得 1 的 个数最多~ 直接暴力搞~ # ...

  6. Codeforces Round #191 (Div. 2)

    在div 188中,幸运的达成了这学期的一个目标:CF1800+,所以这次可以打星去做div2,有点爽. A.Flipping Game 直接枚举 B. Hungry Sequence 由于素数的分布 ...

  7. [Swust OJ 893]--Blocks

    题目链接:http://acm.swust.edu.cn/problem/893/ Time limit(ms): 1000 Memory limit(kb): 65535   Josh loves ...

  8. UVa 437 The Tower of Babylon(经典动态规划)

    传送门 Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details ...

  9. UVa 437 The Tower of Babylon

    Description   Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of ...

随机推荐

  1. Springboot与Maven多环境配置文件夹解决方案

    Profile用法 我们在application.yml中为jdbc.name赋予一个值,这个值为一个变量 jdbc: username: ${jdbc.username} Maven中的profil ...

  2. springcloud gateway整合sentinel

    1.引入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  3. 织梦cms文章内容页上下篇单独获得URL和文章名称修改

    1.打开/include/arc.archives.class.php ,查找   $this->PreNext['pre']    //约813行 在其下一行插入: $this->Pre ...

  4. 0312 java接口测试三棱军刺rest-assured

    背景 java程序员一般写的是后端服务是JavaWeb类型的项目,主要包括Http接口和dubbo接口,Http接口一般采用的rest风格,那么如何快速的对rest接口在第三方的测试框架上进行测试呢? ...

  5. vs code开发python时找不到当前目录下的文件、UnicodeDecodeError: 'gbk'

    一.vs code开发python时找不到当前目录下的文件, file = open("readme.txt")一直报错,找不到目录下面的文件 原来vscode 默认都是以打开的项 ...

  6. 1..Net平台的背景

    一:.Net平台的背景 1. 2010之前 的PC时代的时候,互联网规模还不是特别庞大,以静态编译式语言为代表的JAVA和.Net没什么太大区别,.net以windows自居. 2. 2010年以JA ...

  7. 使用selenium模拟登陆淘宝、新浪和知乎

    如果直接使用selenium访问淘宝.新浪和知乎这些网址.一般会识别出这是自动化测试工具,会有反制措施.当开启开发者模式后,就可以绕过他们的检测啦.(不行的,哭笑) 如果网站只是对windows.na ...

  8. HTTP/1.1 与 HTTP/2.0

    HTTP/1.1 与 HTTP/2.0 HTTP/1.1 持久连接 非持久连接

  9. js 任意值变化封装

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 学习 CSS 之用 CSS 3D 实现炫酷效果

    一.前言 把大象关进冰箱需要几步?三步,把冰箱门打开,把大象关进去,把冰箱门关上. 用 CSS 实现 3D 效果需几步?三步,设置透视效果 perspective,改变元素载体为 preserve-3 ...