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. jsvascript篮球梦

    首先让我们先欣赏一下效果图: html文本: <div class="box"> <img id="imgshow" src="la ...

  2. 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZRjGGy 可交互视频 此视频是可 ...

  3. 前端ps中常用的操作

    昨天,ui给了个psd图,让写成网页.额,要自己切图.很久之前,操作的还凑乎.但是,好久了,都忘了.所以,打算自己记个笔记,方便以后查看. 首先,打开ps就先来设置一下ps的单位啦点击最上面的一行的编 ...

  4. Spring源码阅读笔记04:默认xml标签解析

    上文我们主要学习了Spring是如何获取xml配置文件并且将其转换成Document,我们知道xml文件是由各种标签组成,Spring需要将其解析成对应的配置信息.之前提到过Spring中的标签包括默 ...

  5. python入门到放弃-基本数据类型之tuple元组

    #概述 元组俗称不可变的列表,又称只读列表,是python的基本数据类型之一, 用()小括号表示,里面使用,逗号隔开 元组里面可以放任何的数据类型的数据,查询可以,循环可以,但是就是不能修改 #先来看 ...

  6. safari坑之 回弹

    博客地址: https://www.seyana.life/post/20 今天在使用safari浏览博客的时候, 发现在拉至顶部并产生回弹之后,头部导航隐藏了, 除非在上拉的时候,刚好达到顶部而不超 ...

  7. [每日一题系列] LeetCode 1013. 将数组分成和相等的三个部分

    题目: 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + . ...

  8. 03 Hibernate入门

    Hibernate 说明 由于JPA是sun公司制定的API规范,所以我们不需要导入额外的JPA相关的jar包,只需要导入JPA的提供商的jar包.我们选择Hibernate作为JPA的提供商,所以需 ...

  9. 026.掌握Service-外部访问

    一 集群外部访问 由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端默认情况,无法通过Pod的IP地址或者Service的虚拟IP地址:虚拟端口号进行访问.通常 ...

  10. HTC推出了VIVE Comos 全新 VR(虚拟现实)系列产品

    据 The Verge 报道,近日,HTC 推出了 VIVE Comos 全新 VR(虚拟现实)系列产品.包括 Cosmos 精英套装.VIVE Cosmos XR 版.Cosmos Play 基础版 ...