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. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  2. Ubuntu16.04下安装nvidia-docker2

    若docker-ce.nvidia.CUDA等都安装完成之后,开启docker服务时,能够正常运行,并有预测结果,那表示服务开启没问题:若都安装成功之后,用docker命令开启服务时,一直报错,可能表 ...

  3. python实验一

    安徽工程大学 Python程序设计实验报告 班级物流管理191 姓名彭艺    学号3190505139成绩          日期  2020年3月3日     指导老师    修宇 实验名称    ...

  4. 使用JS检测自定义协议是否存在

    [该博客是拼接他人的,原因我们这边PC的开发人员问我,有没有关于js某个对象直接能检测手机或者电脑的自定义协议的,我上网搜了下,貌似移动端的解决比较多] 最终解决方案:还是需要github上面大神写的 ...

  5. MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)

    hello,小伙伴们,好久不见,MySQL系列停更了差不多两个月了,也有小伙伴问我为啥不更了呢?其实我去看了MySQL的全集,准备憋个大招,更新篇长文(我不会告诉你是因为我懒的). 好了,话不多说,直 ...

  6. 解决挖矿病毒【Xmrig miner 】CPU 100%服务器卡死问题

    背景: 突然有一天,服务器访问很慢很慢,进程查看发现CPU是100%,而且没有任何降低的意思 收集: 打开任务管理器,进程查看中CPU排序,发现一个System的进程,第一想法以为是空闲利用,发现结束 ...

  7. 修改webserver站点用户组权限

    例如webserver站点目录为webtest 搭建nginxwebserver服务器的时候,默认的用户和用户组权限为nginx:nginx, 即nginx.conf 和php-frm.conf 中默 ...

  8. Pocket+Evernote 打造个人知识库体系

    俗话说巧妇难为无米之炊,还是那个不太恰当的例子. 写作就好比人类的消化系统,想要持续的输出...那么就要持续的输入... 今天就来说一说如何进行持续有效的输入. 信息处理过程 先放一张图,这是我的整个 ...

  9. AspNetCore3.1_Secutiry源码解析_1_目录

    文章目录 AspNetCore3.1_Secutiry源码解析_1_目录 AspNetCore3.1_Secutiry源码解析_2_Authentication_核心项目 AspNetCore3.1_ ...

  10. 从 Spring 的环境到 Spring Cloud 的配置

    需求 不知不觉,web 开发已经进入 “微服务”.”分布式” 的时代,致力于提供通用 Java 开发解决方案的 Spring 自然不甘人后,提出了 Spring Cloud 来扩大 Spring 在微 ...