poj1623 Squadtrees
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud
需要求出按题目要求建四叉树所需的结点个数,和压缩后的四叉树的结点个数(压缩即只要将相同的子树只取一颗即可),在此,我用string表示一颗子树。
读取好数据之后,直接dfs一遍即可
poj题目链接:http://poj.org/problem?id=1623
shuoj题目链接:http://202.121.199.212/JudgeOnline/problem.php?id=1701
/*********************************
* Built using CHelper plug-in
* Actual solution is at the top
* @author xyiyy @ http://www.cnblogs.com/fraud/
*********************************/ #include <iostream>
#include <cstring>
#include <map>
#include <cstdio>
using namespace std;
int number[];
char a[][];
int col,row;
map<string,int>Map;
int flag;
int ans;
string dfs(int len,int x,int y,int deep,int &temp)
{
string s="\0";
if(len==)return s+a[x][y];
if(len==)
{
s=dfs(len/,x,y,deep+,temp)+dfs(len/,x,y+len/,deep+,temp)
+dfs(len/,x+len/,y,deep+,temp)+dfs(len/,x+len/,y+len/,deep+,temp);
int l=s.length();
bool flag0=,flag1=;
for(int i=;i<l;i++)
{
if(s[i]=='')flag0=;
else flag1=;
}
if(flag1&&flag0)
{
temp=;Map[s]++;
if(Map[s]==)ans+=;
}
else if(flag1){temp=;}
else {temp=;}
}
else
{
flag=;
string s1="\0";
s=dfs(len/,x,y,deep+,temp);
int flag0=,flag1=;
int ret=;
if(temp>)
ret+=temp;
else if(temp)flag1++;
else flag0++;
if(temp==)s1=s1+"";
else if(temp)s1=s1+"";
s=s+dfs(len/,x,y+len/,deep+,temp);
if(temp>)
ret+=temp;
else if(temp)flag1++;
else flag0++;
if(temp==)s1=s1+"";
else if(temp)s1=s1+"";
s=s+dfs(len/,x+len/,y,deep+,temp);
if(temp>)
ret+=temp;
else if(temp)flag1++;
else flag0++;
if(temp==)s1=s1+"";
else if(temp)s1=s1+"";
s=s+dfs(len/,x+len/,y+len/,deep+,temp);
if(temp>)
ret+=temp;
else if(temp)flag1++;
else flag0++;
if(temp==)s1=s1+"";
else if(temp)s1=s1+"";
if(flag0==){temp=;s="";}
else if(flag1==){temp=;s="";}
else if(flag0+flag1==)
{
s=s1;
temp=;
Map[s]++;
if(Map[s]==)ans+=;
}
else
{
ret+=flag0+flag1;
temp=ret;
Map[s]++;
if(Map[s]==)
{
ans+=flag0+flag1;
}
} }
return s;
}
int main()
{
ios::sync_with_stdio(false);
number[]=;
int n,m;
//freopen("a.in","r",stdin);
for(int i=;i<;i++)number[i]=number[i-]*;
while(cin>>n>>m&&(n||m))
{
ans=;
row=n,col=m;
int id=;
while(number[id]<n||number[id]<m)id++;
row=col=number[id];
for(int i=;i<row;i++)
{
for(int j=;j<col;j++)
a[i][j]='';
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
cin>>a[i][j];
}
}
Map.clear();
int temp=;
string s=dfs(row,,,,temp);
if(temp==||temp==)ans=;
map<string,int>::iterator it;
int ans1=,ans2=; for(it=Map.begin();it!=Map.end();it++)
{
ans++;
} if(temp==)temp=;
cout<<temp<<" "<<ans<<endl;
}
}
poj1623 Squadtrees的更多相关文章
随机推荐
- C语言预处理指令的初步了解
所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理是C语言的一个重要功能,它由预处理程序负责完成.当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分 ...
- c#添加事物(全部执行和带保存点的执行)
全部执行 protected void Button2_Click(object sender, EventArgs e) { // 执行事务 SqlConnection con = new SqlC ...
- 联通3g彩信设置
手机ME865,安卓2.3.6 添加接入点名称:3gwapAPN:3gwap代理:10.0.0.172端口:80服务器:http://www.wo.com.cnMMSC:http://mmsc.myu ...
- hdu 3047 Zjnu Stadium
http://acm.hdu.edu.cn/showproblem.php?pid=3047 带权并差集 #include <cstdio> #include <cstring> ...
- python 安装 ez_setup.py出现的问题及解决办法
试了网上好几个解决办法. 下面这个办法是最对我胃口的. ~~~~~~~~~~~~~~~~ 安装ez_setup.py时出现了这个问题: UnicodeDecodeError: 'ascii' cod ...
- WPF InkCanvas MouseDown及MouseLeftButtonDown事件不触发的代替事件
PreviewMouseDown事件可以触发 再通过e.LeftButton 的状态判断是否按钮被按下 特此备忘
- C3P0连接池详细配置
C3P0连接池详细配置 转自http://msq.javaeye.com/blog/60387 <c3p0-config> <default-config> <!--当连 ...
- linux驱动面试题2
1.什么是GPIO? general purpose input/output GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的 ...
- facl笔记
文件系统访问列表:tom: tom, tom基本组jerry: other:r-- chown FACL:Filesystem Access Control List利用文件扩展保存额外的访问控 ...
- JAX-WS 可运行项目
该项目是通过JAX-WS实现的WebService服务,其中包括了1.关于最简单的WebService服务的创建2.关于文件交互的WebService的创建 代码中包括了服务端代码和客户端代码(客户端 ...