题目链接:

https://www.luogu.org/problemnew/show/UVA297

附几道推荐题目(先完成再食用此题效果更佳)

https://www.luogu.org/problemnew/show/UVA122

https://www.luogu.org/problemnew/show/UVA699

https://www.luogu.org/problemnew/show/UVA839

分析:

本题为树上的递归题目。我们可以在一个子函数search中完成:

  1. void search(int x,int y,int w)

其中x为当前准备判断像素的正方形的最小x坐标,y同理,w为正方形的边长。


每次判断一个字符,如果是灰色,那么继续往下递归:

  1. if(tmp=='p')
  2. {
  3. search(x+w/2,y+w/2,w/2);
  4. search(x+w/2,y,w/2);
  5. search(x,y,w/2);
  6. search(x,y+w/2,w/2);
  7. }
  8. 因为每次灰色后都再次切成四块,所以说每次w要除以2

否则,就是黑或白,白不用管,只把黑色的像素填上:

  1. else
  2. {
  3. if(tmp=='f')
  4. {
  5. for(int i=x;i<x+w;i++)
  6. {
  7. for(int j=y;j<y+w;j++)
  8. {
  9. a[i][j]=1;
  10. }
  11. }
  12. }

这些就是本题的核心部分,还有就是要注意输入输出,初始化等等,在此就不赘述了。

代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<string>
  4. #include<iostream>
  5. using namespace std;
  6. int cnt=-1;
  7. char s[1005];
  8. int a[33][33];
  9. void search(int x,int y,int w)
  10. {
  11. char tmp=s[++cnt];
  12. if(tmp=='p')
  13. {
  14. //if(num==1)
  15. search(x+w/2,y+w/2,w/2);
  16. //else
  17. //if(num==2)
  18. search(x+w/2,y,w/2);
  19. //else
  20. //if(num==3)
  21. search(x,y,w/2);
  22. //else
  23. //if(num==4)
  24. search(x,y+w/2,w/2);
  25. }
  26. else
  27. {
  28. if(tmp=='f')
  29. {
  30. //printf("%d %d %d %d\n",xl,yl,xr,yr);
  31. for(int i=x;i<x+w;i++)
  32. {
  33. for(int j=y;j<y+w;j++)
  34. {
  35. a[i][j]=1;
  36. }
  37. }
  38. }
  39. /*if(num==1)
  40. search(xr*2,yr*2,xr,yr,num+1);
  41. else
  42. if(num==2)
  43. search(xl,yr*2,xr*2,yr,num+1);
  44. else
  45. if(num==3)
  46. search(xl,yl,xr*2,yr*2,num+1);
  47. else
  48. if(num==4)
  49. search(xr*2,yl,xr,yr*2,num+1); */
  50. //search(xl,yl,xr,yr,num+1);
  51. }
  52. }
  53. int main()
  54. {
  55. int T;
  56. scanf("%d\n",&T);
  57. while(T--)
  58. {
  59. cnt=-1;
  60. memset(a,0,sizeof(a));
  61. int ans=0;
  62. cin>>s;
  63. search(0,0,32);
  64. cnt=-1;
  65. cin>>s;
  66. search(0,0,32);
  67. for(int i=0;i<=32;i++)
  68. {
  69. for(int j=0;j<=32;j++)
  70. {
  71. if(a[i][j]==1)
  72. ans++;
  73. }
  74. }
  75. printf("There are %d black pixels.\n",ans);
  76. }
  77. return 0;
  78. }

UVA297 四分树 Quadtrees 题解的更多相关文章

  1. [C++]四分树(Quadtrees)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...

  2. Uva297 Quadtrees【递归建四分树】【例题6-11】

    白书 例题6-11 用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点.如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示:如果既有黑又有白,则 ...

  3. 四分树 (Quadtrees UVA - 297)

    题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include < ...

  4. UVA.297 Quadtrees (四分树 DFS)

    UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...

  5. UVa 297 (四分树 递归) Quadtrees

    题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...

  6. UVA - 297 Quadtrees (四分树)

    题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...

  7. UVA806-Spatial Structures(四分树)

    Problem UVA806-Spatial Structures Accept:329  Submit:2778 Time Limit: 3000 mSec Problem Description ...

  8. 搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表

    4513: [Sdoi2016]储能表 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 395  Solved: 213[Submit][Status] ...

  9. UVa 806 四分树

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

随机推荐

  1. 中国2017 Google 开发者大会第二天简单回顾

    昨天早晨发布了第一天的开发者大会回顾文章后,就匆匆忙忙赶去会场继续享受高科技的盛宴,接下来简单回顾一下第二天的大会参与情况. 昨天早晨下着小雨,并带着微风,在外面还是挺冷的,这里不得不给工作人员点个赞 ...

  2. Qt https 用户认证authenticationRequired()

    用QNetworkAccessManager以POST方式访问https需要用户认证,所以用SIGNAL(authenticationRequired(QNetworkReply *, QAuthen ...

  3. HttpWebRequest 在出错时获取response内容

    HttpWebRequest 请求时,服务器会返回500  501这些错误 并包含错误信息,通过如下代码可以拿到错误信息 HttpWebResponse res; try { res = (HttpW ...

  4. ACL FAQ

    acl 下载地址:https://sourceforge.net/projects/acl/https://github.com/zhengshuxin/acl/http://git.oschina. ...

  5. kube框架结构-一个小型响应式CSS框架

    当你开始初建一个新的项目时,你可能需要一个不太复杂的基础框架,Kube框架应该是你最好的选择.一个独立的CSS文件,帮助你更简单的创建响应式的的布局设计. Kube Framework包括网格.按钮. ...

  6. Awesome C/C++(图像部分)

    GUI Graphic User Interface CEGUI - Flexible, cross-platform GUI library. FLTK - Fast, light, cross-p ...

  7. java-mysql(3) 读写image

    在mysql里面用来存储图片有一个特殊的数据对象叫做 Blob(Binary Large Object). 数据库里面插入一张图片: 第一步:需要为图片创建一个文件对象 File img = new ...

  8. ORACLE(系统表student) 基本与深入学习

    (一).首先我们先创建student表(系统有的可以跳过往下看)没有直接复制运行即可. create table student(sno varchar2(3) not null, --学号sname ...

  9. log4net插入access自定义字段

    1.创建表格 2.创建log4net.xml,并设置属性始终复制,关键属性 <bufferSize value="1" /> <conversionPattern ...

  10. vue项目接入api接口

    我们在做项目时,一切基础在于数据上面,所以接入api接口是关键. 访问接口是我们会遇到跨域,而,vue-cli给我们提供了反向代理,所以我们只需要配置一下就可以了. 在config文件中找到index ...