[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;
}
[Pa2013]Iloczyn的更多相关文章
- 【BZOJ3733】[Pa2013]Iloczyn (搜索)
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...
- BZOJ3733 : [Pa2013]Iloczyn
首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能. 爆搜的时候,如果从$x$开始最小的$y$个相乘也超过 ...
- bzoj3733 [Pa2013]Iloczyn 搜索
正解:搜索 解题报告: 先放下传送门QwQ umm其实并不难,,,最近在复建基础姿势点所以都写的是些小水题QAQ 首先考虑如果能构造出来一定是因数凑起来鸭,所以先把因数都拆出来,然后就爆搜 几个常见的 ...
- BZOJ 3733 [Pa2013]Iloczyn 模拟爆搜
Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...
- bzoj 3733: [Pa2013]Iloczyn【dfs】
参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的 ...
- [bzoj3733]Iloczyn 题解(搜索剪枝)
3733: [Pa2013]Iloczyn Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 741 Solved: 217[Submit][Statu ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【PA2013】【BZOJ3733】Iloczyn
Description 给定正整数n和k,问是否能将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示測试组数 接下来T行每行两个数n(n<=10^9),k(k ...
随机推荐
- SpringMVC参数接收
1 绑定简单类型 要根据id查询商品数据,需要从请求的参数中把请求的id取出来.Id应该包含在Request对象中.可以从Request对象中取id. public ModelAndView item ...
- About SQL Server 2016 CPT2
SQL Server 2016 CTP2已经发布,可以从以下主页进行下载. http://www.microsoft.com/en-us/server-cloud/products/sql-serve ...
- selenium IDE断言设置实践
断言: 验证应用程序的状态是否同所期望的一致. 常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确等等. 断言被用于4种模式+5种手段: Assert Assert 断言失败时,该测试将终 ...
- 编程数学(A-2)-次方
百度百科:次方. 特别是一个数的负次方需要注意.
- 在docker下面安装Nginx PHP mysql let's encrypt
最近自己在弄了个Nginx PHP Mysql Let's encrypt的docker,下面记录一下 1)先装 Let's encrypt docker run --rm -p 80:80 -p 4 ...
- 解决在使用Amoeba遇到的问题
最近有同行在使用Amoeba 的过程中多少遇到了一些问题. 总结一下遇到问题的解决方法: 1.读写分离的时候设置的在queryRouter中设置无效? 读写分离配置的优先级别: 1)满足 ...
- 安装K/3 Cloud过程中发现的两个新问题。
卸载掉K/3 Cloud然后重装时出现下面的错误提示: 可能原因: 1.安装目录下的Setup.exe会检查操作系统版本.有些操作系统可能是被串改过注册信息,所以取不到版本信息(有些是因为盗版的原因) ...
- openjudge1944 吃糖果
描述名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0).妈妈告诉名名每天可以吃一块或者两块巧克力.假设名名每天都吃巧克力,问名名共有多 ...
- readdir() 获取文件类型
readdir()获取文件类型 //// 字符设备文件 type =2, filename207=tty0 crw-rw---- 1 root root 4, 0 04-10 16:28 ...
- nodejs window下安装与配置淘宝镜像
1,前往nodejs官网下载安装软件,地址:https://nodejs.org/en/ 2,点击下一步继续安装,安装完成,在命令输入:node -v,npm -v,查看版本,即是安装成功 3,随便在 ...