Codeforces 448 E. Divisors (DFS,储存结构)
题目链接:E. Divisors
题意:
给出一个X,f(X)是X所有约数的数列(例6:1 2 3 6),给出一个k,k是递归的次数(例:k=2 : f(f(X)) ; X=4,k=2: 1 1 2 1 2 4 ), X (1 ≤ X ≤ 10^12) and k (0 ≤ k ≤ 10^18)。现在给出X与k让你求这个序列,序列长度如果超过1e5就只存1e5个数。
题解:
这个题的话除了DFS没有想到特别好的方法,但是问题是强行DFS时间会超@。@。(DFS思路:处理出dfs时数的所有约数(n^1/2)最大是1e6的复杂度。深度最大是1e5:深度大于1e5其实就可以特判:如果N是1输出1,不然就输出1e5个1)。但是这样我们发现每次dfs都有处理约数复杂度太大,我们可以用map储存vector的方式。如果这个数以前已经被处理过就直接用,没处理过就处理后放到vector中再丢到map里面。(一定要用vector,在dfs中用静态数组好像很容易爆空间@。@)
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 3e5+;
vector<long long> vec;
long long out[MAX_N];
int num = ;
long long N,M,T;
map< long long , vector<long long> > mp;
void dfs(long long n,int pos)
{
if(num>=1e5) return;
vector <long long> vec;
if(mp.count(n)) vec = mp[n];
else
{
// vector 初始化
for(long long i=;i*i<=n;i++)
{
if(n%i==)
{
vec.push_back(i);
if(i != n/i) vec.push_back(n/i);
}
}
sort(vec.begin(),vec.end());
mp.insert(make_pair(n,vec));
}
if(pos == M)
{
for(int i=;i<vec.size();i++)
{
out[num++] = vec[i];
if(num>=1e5) break;
}
return;
}
for(int i=;i<vec.size();i++)
{
if(vec[i] == ) out[num++] = ;
else dfs(vec[i],pos+);
}
}
int main()
{
while(cin>>N>>M)
{
mp.clear();
if(M==)
{
printf("%lld\n",N);
continue;
}
num = ; if(M>=1e5)
{
if(N==)
printf("%lld\n",N);
else
for(int i=;i<1e5;i++) printf("1 ");
continue;
} dfs(N,);
for(int i=;i<num;i++)
{
printf("%lld ",out[i]);
}
printf("\n");
}
return ;
}
Codeforces 448 E. Divisors (DFS,储存结构)的更多相关文章
- MySQL数据库储存引擎Inoodb一--记录储存结构
在开文我先说明一下,接下来的数据库知识文章都是在微信公众号“我们都是小青蛙”学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库进行数据持 久化的时 ...
- [Codeforces 1214D]Treasure Island(dfs)
[Codeforces 1214D]Treasure Island(dfs) 题面 给出一个n*m的字符矩阵,'.'表示能通过,'#'表示不能通过.每步可以往下或往右走.问至少把多少个'.'变成'#' ...
- [Codeforces 163D]Large Refrigerator (DFS+剪枝)
[Codeforces 163D]Large Refrigerator (DFS+剪枝) 题面 已知一个长方体的体积为V,三边长a,b,c均为正整数,求长方体的最小表面积S V以质因数分解的形式给出 ...
- 2019-02-03 线性表的顺序储存结构C语言实现
#include<cstdio> #define MAXSIZE 20 typedef int Elemtype; //Elemtype类型根据实际情况而定,这里取int typedef ...
- CodeForces 448
A:Rewards: 题目链接:http://codeforces.com/problemset/problem/448/A 题意:Bizon有a1个一等奖奖杯,a2个二等奖奖杯,a3个三等奖奖杯,b ...
- Codeforces Gym 100463D Evil DFS
Evil Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descr ...
- Educational Codeforces Round 25 Five-In-a-Row(DFS)
题目网址:http://codeforces.com/contest/825/problem/B 题目: Alice and Bob play 5-in-a-row game. They have ...
- Codeforces 839C Journey【DFS】
C. Journey time limit per test:2 seconds memory limit per test:256 megabytes input:standard input ou ...
- Cut 'em all! CodeForces - 982C(贪心dfs)
K - Cut 'em all! CodeForces - 982C 给一棵树 求最多能切几条边使剩下的子树都有偶数个节点 如果n是奇数 那么奇数=偶数+奇数 不管怎么切 都会有奇数 直接打印-1 贪 ...
随机推荐
- [js高手之路] vue系列教程 - 事件专题(4)
本文主要讲解事件冒泡,事件绑定的简写,事件默认行为,按键码等一系列与事件相关的知识. 一.事件绑定的简写,@事件类型. 之前我的[js高手之路] vue系列教程 - vue的事件绑定与方法(2) 用 ...
- html5 storage事件
HTML5 虽然很多年了,但是真的了解不不够不够.主题说的是 storage时间,说起对 storage 事件的了解还是从 QQ音乐 说起. QQ音乐的主页是 https://y.qq.com , 而 ...
- 左边label随着右边textarea高度自适应
左边label随着右边自适应 近期项目中,有表单需求 默认展示两列,当内容多的时候,可以展示一列 左边列 <div> <label>备注</label> <s ...
- checkbox 全选或取消
Html: 点击label 也能 check <div class="checkbox"> <input class ...
- 别纠结mybatis啦,赶紧来瞅瞅吧
自从用了mybatis后,被坑的次数不下于无数次,今天我们就来说说最最头疼的错误,看看有多少人入过这个坑呢. 当程序出现了 Result Maps collection already contain ...
- Mac新手使用指南:brew安装的nginx常用命令
安装:brew install nginx/sudo brew install nginx 启动:brew services start nginx/sudo brew services start ...
- php的二维数组排序
//建立一个$arr的二维数组 $arr=array( array('name'=>'e','age'=>5), array('name'=>'b','age'=>2), ar ...
- Gulp 插件及其使用
前端现在有很多的自动打包工具,各有优缺点,而gulp作为其中的一员,也有着很受人们的青睐,简单粗暴,然而gulp本身并没有提供很多的API,真正的一些工作则是靠着插件完成的,本文简单介绍一些常用的gu ...
- Educational Codeforces Round 34
F - Clear The Matrix 分析 题目问将所有星变成点的花费,限制了行数(只有4行),就可以往状压DP上去靠了. \(dp[i][j]\) 表示到第 \(i\) 列时状态为 \(j\) ...
- js网页返回顶部和楼层跳跃的实现原理
这是简单的效果图. (实现楼层间的跳跃,主要依靠的是 window.scrollTo(x,y)方法 ,将浏览器的可见区域移动到指定的x,y坐标上.) 说楼层跳跃前,先温习下,一般网页在高度较大时, ...