[刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures
题意:黑白图像的路径表示法
代码:(Accepted,0.120s)
//UVa806 - Spatial Structures
//Accepted 0.120s
//#define _XIENAOBAN_
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
using namespace std;
int N, T(0);
bool Img[66][66];
vector<string> Sqns;
const unsigned C5_10(const string& five) {//五进制转十进制
unsigned ans(0), i(1);
for (auto p(five.rbegin());p != five.rend();++p, i *= 5)
ans += (*p - 48) * i;
return ans;
}
const string C10_5(unsigned ten) {//十进制转五进制(倒序)
string ans;
do ans += char(ten % 5 + 48);
while (ten /= 5);
return ans;
}
bool DFS(int x, int y, string f) {
int len = N / (int)pow(2, f.length()) / 2;
if (!len) {
if (Img[x][y]) {
Sqns.push_back(f);
//cerr << "Debug: Sqns(" << x << ", " << y << ") " << f << endl;//Debug
}
return Img[x][y];
}
bool NW(DFS(x, y, '1' + f));
bool NE(DFS(x, y + len, '2' + f));
bool SW(DFS(x + len, y, '3' + f));
bool SE(DFS(x + len, y + len, '4' + f));
bool flag(NW&&NE&&SW&&SE);
if (flag) {
Sqns.pop_back(), Sqns.pop_back(), Sqns.pop_back(), Sqns.pop_back();
Sqns.push_back(f);
}
return flag;
}
void Initialize() {
Sqns.clear();
for (int i(0);i < N;++i) for (int j(0);j <= N;++j)
Img[i][j] = false;
}
void SolvePlus() {
Initialize();
//Input
char n;
for (int i(0);i < N;++i) for (int j(0);j < N;++j)
cin >> n, Img[i][j] = n - 48;
//Solve
DFS(0, 0, "");
//Output
if (Sqns.size()) {
sort(Sqns.begin(), Sqns.end(), [](string& a, string& b)->bool {
if (a.length() != b.length()) return a.length() < b.length();
return a < b;
});
auto p(Sqns.begin());
int cnt(0);
while (p != Sqns.end()) {
if (cnt == 12) cnt = 0, cout << '\n';
if (cnt++) cout << ' ' << C5_10(*p);
else cout << C5_10(*p);
++p;
}
cout << '\n';
}
cout << "Total number of black nodes = " << Sqns.size() << '\n';
}
void SolveMinus() {
N = -N;
Initialize();
//Input
unsigned n;
while (cin >> n && n != -1)
Sqns.push_back(C10_5(n));
//Solve
if (Sqns.empty());
else if (Sqns[0] == "0") {
for (int i(0);i < N;++i) for (int j(0);j < N;++j)
Img[i][j] = true;
}
else {
for (const auto& t : Sqns) {
//cerr <<"Debug1: "<< t << endl;//
int x(0), y(0), len(N);
for (const auto& c : t) {
len /= 2;
switch (c)
{
case '1': break;
case '2': y += len;break;
case '3': x += len;break;
case '4': x += len;y += len;break;
default:break;
}
}
//cerr << "Debug2: ("<<x << ", " << y <<") "<<len<< endl;//
for (int i(0);i < len;++i)
for (int j(0);j < len;++j)
Img[x + i][y + j] = true;
}
}
//Output
for (int i(0);i < N;++i) {
for (int j(0);j < N;++j)
cout << (Img[i][j] ? '*' : '.');
cout << '\n';
}
}
int main()
{
#ifdef _XIENAOBAN_
#define gets(T) gets_s(T, 129)
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
std::ios::sync_with_stdio(false);
while (cin >> N && N) {
if (T) cout << '\n';
cout << "Image " << ++T << '\n';
if (N > 0) SolvePlus();
else SolveMinus();
}
return 0;
}
分析:用的DFS来递归来着,题目倒是不难,直接跟着题意霸王硬上弓就行。但是大神们用10、20ms,我用了120ms。。。刚刚网上看了看好像思路也差不多。啊不管了,其实好久之前写的了,只是忘记发博客里了,我也有点忘了我怎么写的(记得当时写的时候有点昏昏沉沉)。
唉感觉自己越来越懒了,分析也不高兴写了。
[刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures的更多相关文章
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci
题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...
- [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...
- [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile
题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...
- [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536
这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...
- [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities
题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...
- [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary
题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...
- [刷题]算法竞赛入门经典(第2版) 5-10/UVa1597 - Searching the Web
题意:不难理解,照搬题意的解法. 代码:(Accepted,0.190s) //UVa1597 - Searching the Web //#define _XIENAOBAN_ #include&l ...
随机推荐
- firefox无法使用yslow的解决方案
首先,Yslow不支持firefox 36及以上版本. 解决方案:使用yslow的书签版本 使用方法:1.访问这里 http://yslow.org/mobile/ 2.把页面最后的那个 Deskto ...
- 老司机带路——15个Android撸代码常见的坑
老司机为何能够成为老司机,不是因为开车开得多,而是撸多了… 0x00 使用 startActivityForResult 后在 onActivityResult 中没有正确回调到 Activity.R ...
- 光环国际的PRINCE2培训是怎么上课的?
一.面授班级: 基础级:3天知识精讲(含案例分享+现场演练) 上课时间:上午9:00-12:00,下午1:30-4:30分 考试时间:第3天课程结束后5:30-6:30分 1 个小时闭卷考试 专业 ...
- Redis简单几步
第一步redis安装:1.首先确认下载包为64位的还是32位的2.下载http://code.google.com/p/servicestack/downloads3.解压下载包得到以下文件:cygw ...
- JPlayer Jquery video视频插件
近日一直在搜关于视频的jquery插件,要求功能全,跨平台,百思不得其解,偶尔找到一个插件JPlayer,国产的,很全.为什么选择JPlayer 简单:几分钟就可以上手编码.部署 可定制:可以方便地用 ...
- 解决eclipse中文字很小
新下载的eclipse4.2.1版本,显示中文字体很小,但是英文比较正常.网上查看要更改字体大小,但是更改后英文也变大了,不是想要的结果. window – preferences – general ...
- axure 动态面板制作图片轮播 (01图片轮播)
利用Axure的动态面板组件制作图片轮播: 首先现在操作区添加一个动态面板组件: 鼠标放在动态面板上,右键单击选择面板状态管理,给动态面板设置名称并添加两条状态然后点击确定. 双击动态面板,然后双击s ...
- Angular2入门-数据绑定
▓▓▓▓▓▓ 大致介绍 Angular2中数据绑定的方式默认是以单向方式,数据绑定的方式可以分为: 1.属性绑定和插值表达式 组件类-> 模板 2.事件绑定:模板 -> 组件类 3.双向绑 ...
- oralce set
1 SET TIMING ON 说明:显示SQL语句的运行时间.默认值为OFF. 在SQLPLUS中使用,时间精确到0.01秒.也就是10毫秒. 在PL/SQL DEVELOPER 中 ...
- PHP7中我们应该学习会用的新特性
PHP7于2015年11月正式发布,本次更新可谓是PHP的重要里程碑,它将带来显著的性能改进和新特性,并对之前版本的一些特性进行改进.本文小编将和大家一起来了解探讨PHP7中的新特性. 1. 标量类型 ...