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相关推荐

  1. 省选之前的未完成的计划(截至到省选)

    PLAN OF THE COMING HEOI good problems: -bzoj4823:[Cqoi2017]老C的方块 [*] -bzoj3171:[Tjoi2013]循环格 [*] -bz ...

  2. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  3. 【BZOJ3837】[Pa2013]Filary 随机化神题

    [BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时 ...

  4. bzoj 3838: [Pa2013]Raper (线段树)

    3838: [Pa2013]Raper Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 53  Solved: 27 [Submit][Status] ...

  5. BZOJ3713: [PA2014]Iloczyn

    [传送门:BZOJ3713] 简要题意: 给出一个数,判断这个数能否是两个斐波那契数列的数的乘积 题解: 水题,因为斐波那契数列增长得很快,所以很快就能达到10^9的级别 所以取个50(应该取多了一点 ...

  6. 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 ...

  7. bzoj 3837 pa2013 Filary

    bzoj 先搞第一问.考虑简单情况,如果\(m=2\),那么一定有个剩余类大小\(\ge \lceil\frac{n}{2}\rceil\),同时这也是答案下界 然后我们每次随机选出一个数\(a_i\ ...

  8. [BZOJ3837][Pa2013][随机][乱搞]Filary

    然而我太懒了--没有打哈希. 直觉告诉我第二个答案是选择的k个数的差的gcd,那么对于每一个质因数,记录一下序列中能被这个质数整除的差的gcd,然后就可以了 #include <cstdio&g ...

  9. 【PA2013】【BZOJ3837】Filary

    Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时的m.如果有多组解使得k最大,你要在此基础上求出m ...

  10. BZOJ3837 : [Pa2013]Filary

    当m取2时,k至少为$\frac{n}{2}$ 所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$ 每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数 所有质因数中 ...

最新文章

  1. 第一周——数据分析之表示 —— Numpy 数据存取与函数
  2. Binder源码分析之驱动层(原)
  3. 【数据结构与算法】之栈与队列的应用和操作
  4. 'Request' object has no attribute 'META'报错解决
  5. 如何将iPhone或iPad更新到iOS 11
  6. 进程间通信————无名管道
  7. java 输出三位数和n位数的每一位的数
  8. MFC设置对话框背景色及控件颜色
  9. 关于csgo的观看录像fps低_CSGO:Ququ带队击败LQ豪取五连冠,8次MVP闪耀全场
  10. GoLang的逃逸分析
  11. window上安装fasttext
  12. 业务中台实践助力企业数字化转型
  13. 公司IT管理制度——案例分享
  14. DNA序列转换为RNA序列
  15. 项目中如何引入阿里巴巴icon图标
  16. 干货3分钟搞懂私募投以及技术面试
  17. Oracle进阶(六)包(Package)和包体
  18. 笔记:毫米波雷达传感器,优势、应用和产业规模
  19. spring框架使用JavaMailSenderImpl发送邮件
  20. 传统文化之广场舞乱相到底反映出中国社会怎样的深层次矛盾

热门文章

  1. Spring Data JPA 常用 CRUD 操作汇总 及 关联关系( 操作 h2 内存数据)
  2. Tomcat 下载安装,启动,停止,注册服务,开机自启
  3. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_4_练习_递归打印多级目录...
  4. Microsoft ASP.NET 4 Step by Step
  5. 第一回 钟碧诚 被迫上屋顶
  6. ubunt 文件permission denied问题的解决
  7. three.js 来源目光(十三)Math/Ray.js
  8. (转)MapReduce二次排序
  9. Hibernate的CRUD
  10. CSS——简写属性(在padding和margin这样的简写属性中,值赋值的顺序是top、right、bottom、left)...