2017.9.26 块的计数 思考记录
2017-09-26 23:25
141 查看
这种题就属于那种描述很简单,要求很简单,但就是无从下手的题
这个题我只有n根n做法、、枚举因数检验。。
首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置-1,不符题意
然后我们还需要发现一个性质,如果能分成大小为n的块,子树节点数的数量是n的倍数的数量一定为总点数/n
证明其实也不难,关键是想不到、其实思考划分问题我们可以只考虑特殊点,对于一些点的不确定可以转化为只讨论确定的点
因为点的sz统计是不重复的,所以如果出现了sz为n的倍数的点,则说明两两之间至少有n个点不同
而所有点都能被划分,所以如果总点数/n==sz是n的倍数的节点个数,说明n/i*n个点都被分配到块里了,满足题意
码:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
#define N 1000005
int i,sz
,ans,a,b,tong
,n,j;
vector<int>v
;
void dfs(int o,int fa)
{
int i;
sz[o]=1;
for(i=0;i<v[o].size();i++)
{
int nd=v[o][i];
if(nd==fa)continue;
dfs(nd,o);
sz[o]+=sz[nd];
}
tong[sz[o]]++;
}
int main()
{
scanf("%d",&n);
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
dfs(a,0);
for(i=1;i<=n;i++)
{
if(n%i)continue;
int o=0;
for(j=i;j<=n;j+=i)
{
o+=tong[j];
}
if(o==n/i)ans++;
}
printf("%d",ans);
}
这个题我只有n根n做法、、枚举因数检验。。
首先对于任何块的大小,方案唯一,这是显然的,,如果划分位置改变1,一定有一个位置+1,一个位置-1,不符题意
然后我们还需要发现一个性质,如果能分成大小为n的块,子树节点数的数量是n的倍数的数量一定为总点数/n
证明其实也不难,关键是想不到、其实思考划分问题我们可以只考虑特殊点,对于一些点的不确定可以转化为只讨论确定的点
因为点的sz统计是不重复的,所以如果出现了sz为n的倍数的点,则说明两两之间至少有n个点不同
而所有点都能被划分,所以如果总点数/n==sz是n的倍数的节点个数,说明n/i*n个点都被分配到块里了,满足题意
码:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
#define N 1000005
int i,sz
,ans,a,b,tong
,n,j;
vector<int>v
;
void dfs(int o,int fa)
{
int i;
sz[o]=1;
for(i=0;i<v[o].size();i++)
{
int nd=v[o][i];
if(nd==fa)continue;
dfs(nd,o);
sz[o]+=sz[nd];
}
tong[sz[o]]++;
}
int main()
{
scanf("%d",&n);
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
dfs(a,0);
for(i=1;i<=n;i++)
{
if(n%i)continue;
int o=0;
for(j=i;j<=n;j+=i)
{
o+=tong[j];
}
if(o==n/i)ans++;
}
printf("%d",ans);
}
相关文章推荐
- 2017.8.7 序列计数 思考记录
- 2017.6.12 crash的数字表格 思考记录
- 推荐一种新的思考、记录方法“思维导图”
- 2017.10.5 最短母串 思考记录
- 2017.7.30 玩具装箱 思考记录
- 2017.10.19 大陆争霸 思考记录
- 2017.10.28 压缩 思考记录
- 多记录,多思考,多总结
- 2017.5.11 道路修建 思考记录
- 2017.9.6 外星人 思考记录
- 2017.9.10 序列操作 思考记录
- 2017.7.13 维修数列 思考记录
- 2017.9.20 回文串 思考记录
- 2017.7.19 Race 思考记录
- 2017.3.24 分裂游戏 思考记录
- 2017.6.6 数表 思考记录
- 一句Update语句返回响应0条记录的思考
- charindex使用一个异常记录思考
- 2017.8.10 奖励关 思考记录
- 2017.4.20 火星人 思考记录