【习题 6-8 UVA - 806】Spatial Structures
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
写两个dfs模拟就好。
注意每12个数字输出一个换行。。
【代码】
/*
1.Shoud it use long long ?
2.Have you ever test several sample(at least therr) yourself?
3.Can you promise that the solution is right? At least,the main ideal
4.use the puts("") or putchar() or printf and such things?
5.init the used array or any value?
6.use error MAX_VALUE?
7.use scanf instead of cin/cout?
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int n;
char s[N][N];
vector <long long> v;
int numberblack(int x1,int y1,int x2,int y2){
int cnt = 0;
for (int i = x1;i <= x2;i++)
for (int j = y1;j<= y2;j++)
if (s[i][j]=='1')
cnt++;
return cnt;
}
void dfs(int x1,int y1,int x2,int y2,int now,int xishu){
int temp1 = numberblack(x1,y1,x2,y2);
if (temp1==0) return;
int should = (x2-x1+1)*(y2-y1+1);
if (temp1==should){
v.push_back(now);
return;
}
int midx = (x1+x2)/2,midy = (y1+y2)/2;
dfs(x1,y1,midx,midy,now + 1*xishu,xishu*5);
dfs(x1,midy+1,midx,y2,now + 2*xishu,xishu*5);
dfs(midx+1,y1,x2,midy,now + 3*xishu,xishu*5);
dfs(midx+1,midy+1,x2,y2,now + 4*xishu,xishu*5);
}
void fugai(int x1,int y1,int x2,int y2){
for (int i = x1;i <= x2;i++)
for (int j = y1;j <= y2;j++)
s[i][j] = '*';
}
void dfs2(int x1,int y1,int x2,int y2,int rest){
if (rest==0){
fugai(x1,y1,x2,y2);
return;
}
int ope = rest%5;
int midx = (x1+x2)/2,midy = (y1+y2)/2;
switch (ope){
case 1: dfs2(x1,y1,midx,midy,rest/5);break;
case 2: dfs2(x1,midy+1,midx,y2,rest/5);break;
case 3: dfs2(midx+1,y1,x2,midy,rest/5);break;
case 4: dfs2(midx+1,midy+1,x2,y2,rest/5);break;
}
}
int main(){
#ifdef LOCAL_DEFINE
freopen("F:\\c++source\\rush_in.txt", "r", stdin);
freopen("F:\\c++source\\rush_out.txt", "w", stdout);
#endif
ios::sync_with_stdio(0),cin.tie(0);
int kase = 0;
while (cin >>n && n!=0){
if (kase>0) cout << endl;
kase++;
cout <<"Image "<<kase<<endl;
if (n>0){
v.clear();
for (int i = 1;i <= n;i++) cin >> (s[i]+1);
dfs(1,1,n,n,0,1);
sort(v.begin(),v.end());
for (int i = 0;i < (int) v.size();i++){
cout << v[i];
if ((i+1)%12==0 || i==(int) v.size()-1) cout << endl;else cout <<' ';
}
cout <<"Total number of black nodes = "<<(int) v.size()<<endl;
}else{
n = -n;
for (int i = 1;i <= n;i++)
for (int j =1 ;j <= n;j++) s[i][j] = '.';
int x;
for (cin >>x;x!=-1;cin>>x){
dfs2(1,1,n,n,x);
}
for (int i = 1;i <= n;i++){
for (int j =1 ;j <= n;j++) cout <<s[i][j];
cout << endl;
}
}
}
return 0;
}
【习题 6-8 UVA - 806】Spatial Structures的更多相关文章
- UVA 806 Spatial Structures
题意: 如果某一大区域所有色块颜色是相同的,那么这一个大区域就算作一块,如果不同,则将其划分成四个小区域,然后重复上述步骤递归进行直到所有区域的颜色相同为止.然后根据上面划分的区域建树,小区域作为大区 ...
- [刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures
题意:黑白图像的路径表示法 代码:(Accepted,0.120s) //UVa806 - Spatial Structures //Accepted 0.120s //#define _XIENAO ...
- UVA-806 Spatial Structures (四分树)
题目大意:将一块图像上的黑点在两种表示法之间转换. 题目分析:递归下去... 注意:输出时要注意细节!!! 代码如下: # include<iostream> # include<c ...
- UVa 806 四分树
题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. #include &l ...
- uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)
input 8 00000000 00000000 00001111 00001111 00011111 00111111 00111100 00111000 -8 9 14 17 22 23 44 ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- ACM训练计划建议(转)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- 动态规划 Dynamic Programming 学习笔记
文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...
- UVa第五章STL应用 习题((解题报告))具体!
例题5--9 数据库 Database UVa 1592 #include<iostream> #include<stdio.h> #include<string.h&g ...
随机推荐
- [Chromium文档转载,第003章]Proposal: Mojo Synchronous Methods
Proposal: Mojo Synchronous Methods yzshen@chromium.org 02/02/2016 Overview Currently there are quite ...
- WebAssembly学习(四):AssemblyScript - 结构体系与内置函数
一.结构体系 1.编译 编译器的结构相对保守. 提供源文件,其文本被标记化并解析为抽象语法树. 这里执行语法级检查. 一旦解析了所有引用的源文件,就构造一个程序并从AST初始化. 在这里进行合理性检查 ...
- Java并发包之Semaphore用法
多线程中的同步概念就是排着队去执行一个任务,执行任务的是一个一个的执行,并不能并行执行,这样的优点是有助于程序逻辑的正确性,不会出现线程安全问题,保证软件的系统功能上的运行稳定性, Semaphore ...
- 【转】flex中的labelFunction(combox和dataGrid)
Flex中,对于显示一个字段,只需要指定对应字段属性给labelField即可,当需要上述所需要的功能的时候就得做个转换了,在Flex的基于List的组件都有一个labelFunction方法能很简单 ...
- 【Henu ACM Round#14 C】Duff and Weight Lifting
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 2^y可以由两个2^(y-1)相加得到. 则有一个贪心的策略. 就是2^x尽量都变成2^(x+1) (即能够凑就尽量凑) 如果x还有 ...
- HDU 4588 Count The Carries 数位DP || 打表找规律
2013年南京邀请赛的铜牌题...做的非常是伤心.另外有两个不太好想到的地方.. ..a 能够等于零,另外a到b的累加和比較大.大约在2^70左右. 首先说一下解题思路. 首先统计出每一位的1的个数, ...
- tomcat 分别在window 和 Linux上配置SSL-安全问题
公司项目收尾后.通过压力測试后的安全測试.安全測试后中,对于网络传输中数据加密问题存在安全隐患. 须要配置SSL. 简介下SSL协议:SSL或者Secure Socket Layer,是一种同意web ...
- jquery源码09 (6058 , 6620) css() : 样式的操作
var curCSS, iframe, // swappable if display is none or starts with table except "table", & ...
- 70.nodejs操作mongodb
转自:https://www.cnblogs.com/whoamme/p/3467374.html 首先安装nodejs mongodb npm install mongodb var mongodb ...
- #学习笔记#——JavaScript 数组部分编程(五)
11.为数组 arr 中的每个元素求二次方.不要直接修改数组 arr,结果返回新的数组 function square(arr) { var resultArr=new Array(); for(va ...