【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

写两个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的更多相关文章

  1. UVA 806 Spatial Structures

    题意: 如果某一大区域所有色块颜色是相同的,那么这一个大区域就算作一块,如果不同,则将其划分成四个小区域,然后重复上述步骤递归进行直到所有区域的颜色相同为止.然后根据上面划分的区域建树,小区域作为大区 ...

  2. [刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures

    题意:黑白图像的路径表示法 代码:(Accepted,0.120s) //UVa806 - Spatial Structures //Accepted 0.120s //#define _XIENAO ...

  3. UVA-806 Spatial Structures (四分树)

    题目大意:将一块图像上的黑点在两种表示法之间转换. 题目分析:递归下去... 注意:输出时要注意细节!!! 代码如下: # include<iostream> # include<c ...

  4. UVa 806 四分树

    题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. #include &l ...

  5. uva806 Spatial Structures 空间结构 (黑白图像的四分树表示)

    input 8 00000000 00000000 00001111 00001111 00011111 00111111 00111100 00111000 -8 9 14 17 22 23 44 ...

  6. ACM训练计划建议(写给本校acmer,欢迎围观和指正)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

  7. ACM训练计划建议(转)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

  8. 动态规划 Dynamic Programming 学习笔记

    文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...

  9. UVa第五章STL应用 习题((解题报告))具体!

    例题5--9 数据库 Database UVa 1592 #include<iostream> #include<stdio.h> #include<string.h&g ...

随机推荐

  1. BZOJ3569: DZY Loves Chinese II(线性基构造)

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生.   今Dzy有一魞歄图, ...

  2. Centos6.5 安装lamp环境

    转载自:http://www.jb51.net/article/37987.htm (转载请注明出处,谢谢) 准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/i ...

  3. 【editplus经常用的快捷键】Editplus 选中一行ctrl+r,Edit 合并行 Ctrl+Shift+J 合并选定行 删除当前行

    Editplus 选中一行: ctrl+rEditplus 复制一行: ctrl+r选择行,然后ctrl+c复制.复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行Ed ...

  4. 洛谷——P2446 [SDOI2010]大陆争霸

    https://www.luogu.org/problem/show?pid=2446#sub 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别 ...

  5. java一个月日历

    项目须要,获取当天之后的30天.并提示星期几(周几),写了一个工具类 /** * 计算日期时间 * @author shijing * 2015年8月10日下午2:16:09 * @param dat ...

  6. smarty课程---最最最简单的smarty例子

    smarty课程---最最最简单的smarty例子 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个 ...

  7. 搜寻Linux软件实用指南

    搜寻Linux软件实用指南  对于初学者来说,仅仅安装好Linux系统还是不够的,还需要安装大量的应用软件.许多下载网站都提供了诸如装机必备软件的下载,分门别类提供经典的工具软件下载.本文主要针对初学 ...

  8. HDU 1716 排列2

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. 亲测有效的解决在vue cli@3 create 命令执行后 node-sass无法安装上的问题

    在使用Vue cli@3 搭建工程手脚架的过程中.当我们选择了采用 sass 处理 css 编译.在使用vue create test 命令行执行到最后.会到以下这步:然后开始报错: Download ...

  10. iptables-save && iptables-restore iptables规则保存于还原

    iptables-save命令用于将linux内核中的iptables表导出到标准输出设备商,通常,使用shell中I/O重定向功能将其输出保存到指定文件中. 语法 -t:指定要保存的表的名称. 实例 ...