Quadtrees, UVa 297 算法竞赛入门经典例题6-11

题目

链接

点此处跳转题目

输入

3
ppeeefpffeefe
pefepeefe
peeef
peefe
peeef
peepefefe

输出

There are 640 black pixels.
There are 512 black pixels.
There are 384 black pixels.

书上的AC代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cstdio> 
#include<cstring> 
using namespace std;
const int len = 32;
const int maxn = 1024 + 10;
char s[maxn];
int buf[len][len], cnt;
//把字符串s[p..]导出到以(r,c)为左上角,边长为w的缓冲区中
//2 1 
//3 4 
void draw(const char* s, int& p, int r, int c, int w) {
	char ch = s[p++];
	if (ch == 'p') {//只有读到P的时候才会有子树
		draw(s, p, r, c + w / 2, w / 2); //1 
		draw(s, p, r, c, w / 2); //2 
		draw(s, p, r + w / 2, c, w / 2); //3 
		draw(s, p, r + w / 2, c + w / 2, w / 2); //4 
	}
	else if (ch == 'f') { //画黑像素(白像素不画)  只要有黑色,就给该处覆盖画上黑色
		for (int i = r; i < r + w; i++)
			for (int j = c; j < c + w; j++)
				if (buf[i][j] == 0) { buf[i][j] = 1; cnt++; }
	}
}
int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		memset(buf, 0, sizeof(buf));
		cnt = 0;
		for (int i = 0; i < 2; i++) {//读入两次
			scanf("%s", s);
			int p = 0;
			draw(s, p, 0, 0, len);
		}
		printf("There are %d black pixels.\n", cnt);
	}
	return 0;
}

后记

今天还有一道例题要学,先把代码和解析丢上来,至于别的有空再说
——蒟蒻的第七篇博客
2021-1-22 19:52

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值