297UVa四分树
来源:互联网 发布:视频会议录像软件 编辑:程序博客网 时间:2024/06/06 05:11
一次AC,但写得很复杂
主要搞清楚,什么时候要递归调用(读到'p’),什么时候要返回上一层(产生了4个节点后)
#include<stdio.h>#include<string.h>char first[2000];char sec[2000];char ans[2000];void eat(char*& str);void build(char*& first, char*& sec,char*& ans);void tree(char*& first, char*& sec,char*& ans);int sum(char*& s,int n);int count(char*& s,int n);int main(){//freopen("input.txt","r",stdin);int numcase;scanf("%d", &numcase);for(int i = 0; i < numcase; i++){scanf("%s",first);scanf("%s",sec);memset(ans, 0, sizeof(ans) );char* f = first;char* s = sec;char* a =ans;build(f,s,a);*a = '\0';//printf("%s\n",ans);a = ans;printf("There are %d black pixels.\n", sum(a,1024));}}int sum(char*& s,int n){switch(*s){case 'e':return 0;case 'f':return 1024;case 'p':return count(++s,n/4);}}int count(char*& s,int n){int sum = 0;for(int i = 0; i < 4;i++){switch(*s){case 'e':sum+=0;s++;break;case 'f':sum+=n;s++;break;case 'p':sum+=count(++s,n/4);break;}}return sum;}void build(char*& first, char*& sec,char*& ans){char* pt = 0;if(*first == *sec){*ans = *first;if(*ans == 'p')tree(++first,++sec,++ans);}else if(*first=='f'&&*sec=='e'){*ans++ = *first++;sec++;}else if(*first=='e'&&*sec=='f'){*ans++ = *sec++;first++;}else if(*first=='p'&&*sec=='e'){sec++;*ans++ = *first++;tree(first,pt,ans);}else if(*first=='e'&&*sec=='p'){first++;*ans++ = *sec++;tree(pt,sec,ans);}else if(*first=='p'&&*sec=='f'){//eat(++first);*ans++ = *sec++;}else if(*first=='f'&&*sec=='p'){//eat(++sec);*ans++ = *first++;}}void tree(char*& first, char*& sec,char*& ans){char* pt = 0;for(int i = 0; i < 4;i++){if(!first){*ans = *sec;if(*ans == 'p')tree(first,++sec,++ans);else{ans++;sec++;}}else if(!sec){*ans = *first;if(*ans == 'p')tree(++first,sec,++ans);else{ans++;first++;}}else if(*first == *sec){*ans = *first;if(*ans == 'p')tree(++first,++sec,++ans);else{ans++;first++;sec++;}}else if(*first=='f'&&*sec=='e'){*ans++ = *first++;sec++;}else if(*first=='e'&&*sec=='f'){*ans++ = *sec++;first++;}else if(*first=='p'&&*sec=='e'){sec++;*ans++ = *first++;tree(first,pt,ans);}else if(*first=='e'&&*sec=='p'){first++;*ans++ = *sec++;tree(pt,sec,ans);}else if(*first=='p'&&*sec=='f'){eat(++first);*ans++ = *sec++;}else if(*first=='f'&&*sec=='p'){eat(++sec);*ans++ = *first++;}}}void eat(char*& str){for(int i = 0; i < 4;i++){if(*str !='p')str++;elseeat(++str);}}
这个不用建树的:
http://blog.csdn.net/zyq522376829/article/details/46516621 0 0
- UVa 297 四分树
- UVa 297 Quadtrees(四分树)
- uva 297 四分树
- uva 297 Quadtrees 四分树
- Quadtrees UVA 297 四分树
- 297UVa四分树
- uva-297 四分树
- UVa 297 Quadtrees(模拟&四分树)
- 例题:四分树(UVa 297)
- uva 297
- uva 297
- uva 297
- uva 297
- uva 297
- uva 297
- uva 297
- UVA 297
- uva 297
- django1.8+中bootstrap安装
- 简单css+js动态加载特效
- Android App支付系列(一):微信支付接入详细指南(附官方支付demo)
- JAVA变量类型
- POJ 1141 Brackets Sequence 区间DP(括号匹配)
- 297UVa四分树
- Note7燃损原因公布三星汲取经验教训强化安全措施
- 拔开疑云查明真相三星公布Note7燃损原因系电池所致
- 《JavaScript DOM 编程艺术》(第2版)之读后感悟
- Anaconda 更新和第三方包更新
- NYOJ975 - 关于521
- Ubuntu14.04设置搜狗输入法
- Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)
- c++ double free or corruption (!prev)