[Pa2013]Iloczyn
https://www.zybuluo.com/ysner/note/1300802
题面
给定正整数\(n\)和\(k\),问能否将\(n\)分解为\(k\)个不同正整数的乘积。
\(n\leq10^9,k\leq20,T\leq4000\)
解析
这破题目卡常,删了一堆define快一倍
可以发现\(12!=479001600>10^9\)。
所以\(n\)顶多被分解成\(11\)个不同正整数。
常规操作:找出所有约数然后\(O(2^{11})\)枚举加剪枝。
然而我不会搜索啊,\(TLE\)了一个小时。
要加这些剪枝。
- 乘上后面最小的\(t\)(还没选的数的个数)个数大于\(n\),则\(return\)
- 搜索过程不是枚举这个数选不选,而是枚举下一次跳到哪个数
只加这些剪枝的后果是要去掉程序中的\(define\)和不必要的库(我还去了读入优化)。
然后\(bzoj\)上由\(TLE\)变成时限一半。。。辣鸡卡常题。。。
然后写总结时又想到一个
- 如果\(k!>n\),则\(continue\)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2000;
int n,k,sta[N],top,las,f[N][22];
long long jc[22];
int dfs(int x,int t,int s)
{if(!t) return s==n;for(--t;x+t<=top;++x){if(f[x][t]<0) return 0;if(1ll*f[x][t]*s>n) return 0;if(dfs(x+1,t,sta[x]*s)) return 1;}return 0;
}
int main()
{ios::sync_with_stdio(false);int T;cin>>T;jc[0]=1;for(int i=1;i<=12;++i) jc[i]=jc[i-1]*i;while(T--){cin>>n>>k;top=0;if(jc[k]>n||k>12) {puts("NIE");continue;}for(int i=1;i*i<=n;++i)if(n%i==0){sta[++top]=i;if(i*i!=n) sta[++top]=n/i;}sort(sta+1,sta+1+top);for(int i=1;i<=top;++i){long long t=1;for(int j=0;j<k&&i+j<=top;f[i][j++]=t)if(t>0){t*=sta[i+j];if(t>n) t=-1;}}puts(dfs(1,k,1)?"TAK":"NIE");}return 0;
}
转载于:https://www.cnblogs.com/yanshannan/p/9744019.html
[Pa2013]Iloczyn相关推荐
- 省选之前的未完成的计划(截至到省选)
PLAN OF THE COMING HEOI good problems: -bzoj4823:[Cqoi2017]老C的方块 [*] -bzoj3171:[Tjoi2013]循环格 [*] -bz ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- 【BZOJ3837】[Pa2013]Filary 随机化神题
[BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时 ...
- bzoj 3838: [Pa2013]Raper (线段树)
3838: [Pa2013]Raper Time Limit: 60 Sec Memory Limit: 128 MB Submit: 53 Solved: 27 [Submit][Status] ...
- BZOJ3713: [PA2014]Iloczyn
[传送门:BZOJ3713] 简要题意: 给出一个数,判断这个数能否是两个斐波那契数列的数的乘积 题解: 水题,因为斐波那契数列增长得很快,所以很快就能达到10^9的级别 所以取个50(应该取多了一点 ...
- BZOJ3837: [Pa2013]Filary
当m=2时,k至少为n/2 所以序列中的每一个位置都有至少1/2的概率在k个数中 随机一个序列的位置i,计算i在k个数中时,k的最大值 计算其他n-1个数和a[i]的差b[j],另外k-1个数的b[j ...
- bzoj 3837 pa2013 Filary
bzoj 先搞第一问.考虑简单情况,如果\(m=2\),那么一定有个剩余类大小\(\ge \lceil\frac{n}{2}\rceil\),同时这也是答案下界 然后我们每次随机选出一个数\(a_i\ ...
- [BZOJ3837][Pa2013][随机][乱搞]Filary
然而我太懒了--没有打哈希. 直觉告诉我第二个答案是选择的k个数的差的gcd,那么对于每一个质因数,记录一下序列中能被这个质数整除的差的gcd,然后就可以了 #include <cstdio&g ...
- 【PA2013】【BZOJ3837】Filary
Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时的m.如果有多组解使得k最大,你要在此基础上求出m ...
- BZOJ3837 : [Pa2013]Filary
当m取2时,k至少为$\frac{n}{2}$ 所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$ 每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数 所有质因数中 ...
最新文章
- 第一周——数据分析之表示 —— Numpy 数据存取与函数
- Binder源码分析之驱动层(原)
- 【数据结构与算法】之栈与队列的应用和操作
- 'Request' object has no attribute 'META'报错解决
- 如何将iPhone或iPad更新到iOS 11
- 进程间通信————无名管道
- java 输出三位数和n位数的每一位的数
- MFC设置对话框背景色及控件颜色
- 关于csgo的观看录像fps低_CSGO:Ququ带队击败LQ豪取五连冠,8次MVP闪耀全场
- GoLang的逃逸分析
- window上安装fasttext
- 业务中台实践助力企业数字化转型
- 公司IT管理制度——案例分享
- DNA序列转换为RNA序列
- 项目中如何引入阿里巴巴icon图标
- 干货3分钟搞懂私募投以及技术面试
- Oracle进阶(六)包(Package)和包体
- 笔记:毫米波雷达传感器,优势、应用和产业规模
- spring框架使用JavaMailSenderImpl发送邮件
- 传统文化之广场舞乱相到底反映出中国社会怎样的深层次矛盾
热门文章
- Spring Data JPA 常用 CRUD 操作汇总 及 关联关系( 操作 h2 内存数据)
- Tomcat 下载安装,启动,停止,注册服务,开机自启
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_4_练习_递归打印多级目录...
- Microsoft ASP.NET 4 Step by Step
- 第一回 钟碧诚 被迫上屋顶
- ubunt 文件permission denied问题的解决
- three.js 来源目光(十三)Math/Ray.js
- (转)MapReduce二次排序
- Hibernate的CRUD
- CSS——简写属性(在padding和margin这样的简写属性中,值赋值的顺序是top、right、bottom、left)...