Description

给定正整数n和k,问能否将n分解为k个不同正整数的乘积

Input

第一行一个数T(T<=4000)表示测试组数
接下来T行每行两个数n(n<=10^9),k(k<=20)

Output

输出T行,若可以被分解,输出"TAK"否则输出"NIE"

Sample Input

3
15 2
24 4
24 5

Sample Output

TAK
TAK
NIE
 
好久不写搜索果然没什么剪枝的思路,其实这道题的剪枝也很好想
关键是效果非常显著
我们设$DFS(x,y,z)$表示到选到第$x$个因数还有$y$个没选乘积为$z$是否合法
然后我们预处理出来$f[i][j]$表示从$i$开始再选最小的$j$个的最小乘积
如果当前$z*f[x][y]>n$就一定没有合法方案了,加上这个剪枝后跑的飞快
代码:
 #include<iostream>
#include<cstdio>
#include<algorithm>
#define M 2010
using namespace std;
int T,n,k,tot;
int q[M],f[M][];
bool dfs(int x,int y,int z)
{
if(!y) return n==z;--y;
while(x+y<=tot)
{
if(f[x][y]<) return false;
if(1ll*f[x][y]*z>n) return false;
if(dfs(x+,y,z*q[x])) return true;
x++;
}
return false;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);tot=;
for(int i=; i*i<=n; i++)
if(n%i==)
{
q[++tot]=i;
if(n/i!=i) q[++tot]=n/i;
}
sort(q+,q++tot);
for(int i=; i<=tot; i++)
{
long long t=;
for(int j=; j<k&&(i+j)<=tot; f[i][j++]=t)
if(t>) {t*=q[i+j];if(t>n) t=-;}
}
if(dfs(,k,)) puts("TAK");
else puts("NIE");
}
return ;
}

[BZOJ3733]Iloczyn的更多相关文章

  1. [bzoj3733]Iloczyn 题解(搜索剪枝)

    3733: [Pa2013]Iloczyn Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 741  Solved: 217[Submit][Statu ...

  2. 【BZOJ3733】[Pa2013]Iloczyn (搜索)

    [BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...

  3. BZOJ3733 : [Pa2013]Iloczyn

    首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能. 爆搜的时候,如果从$x$开始最小的$y$个相乘也超过 ...

  4. bzoj3733 [Pa2013]Iloczyn 搜索

    正解:搜索 解题报告: 先放下传送门QwQ umm其实并不难,,,最近在复建基础姿势点所以都写的是些小水题QAQ 首先考虑如果能构造出来一定是因数凑起来鸭,所以先把因数都拆出来,然后就爆搜 几个常见的 ...

  5. 【PA2013】【BZOJ3733】Iloczyn

    Description 给定正整数n和k,问是否能将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示測试组数 接下来T行每行两个数n(n<=10^9),k(k ...

  6. BZOJ3713: [PA2014]Iloczyn

    3713: [PA2014]Iloczyn Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 206  Solved: 112[Submit][Status ...

  7. BZOJ 3713: [PA2014]Iloczyn( 枚举 )

    斐波那契数列<10^9的数很少很少...所以直接暴力枚举就行了... ------------------------------------------------------------- ...

  8. 3713: [PA2014]Iloczyn

    3713: [PA2014]Iloczyn Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 327  Solved: 181[Submit][Status ...

  9. [PA2014]Iloczyn

    [PA2014]Iloczyn 题目大意: 询问\(n(n\le10^9)\)是否是两个斐波那契数之积. 思路: \({\rm fib}(45)<10^9,{\rm fib}(46)>10 ...

随机推荐

  1. [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”

    在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...

  2. hdu1568&&hdu3117 求斐波那契数前四位和后四位

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...

  3. ios开发 更改状态栏

    设置statusBar 简单来说,就是设置显示电池电量.时间.网络部分标示的颜色, 这里只能设置两种颜色: 默认的黑色(UIStatusBarStyleDefault) 白色(UIStatusBarS ...

  4. 不阻塞浏览器的解析,待外部js下载完成后异步执行

    网站统计中的数据收集原理及实现(js埋点实现) - lastwhisper - CSDN博客 https://blog.csdn.net/l1212xiao/article/details/80450 ...

  5. Linux常用软件(以及特殊命令)清单(ubuntu)

    LibreOffice 解压缩命令 unar .tar 创建新文档命令:touch.vi/vim 浏览器:google chrome.firefox

  6. vue系列

    1.vue基础 2.vue请求和跨域 3.自定义全局组件 4.vue-router 5.Vuex

  7. 多进程使用matplotlib.pyplot绘heatmap(多线程不可以)

    数据格式如下: 8_15/l_eye/2732.png -20.5773 -5.17769 -3.34583 21.5859 9_13_1/l_eye/1211.png -10.1145 34.992 ...

  8. mysql监控优化(三)慢查询

    顾名思义,慢查询日志中记录的是执行时间较长的query,也就是我们常说的slowquery,通过设--log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名.慢查询 ...

  9. ui-select : There is no "X"(delete button) with selectize theme, when allow-clear="true"

    but add allow-clear="true"For Bootstrap and Select2 themes, it's working perfectly. reason ...

  10. php about session store db or cache

    PHP关于Session的配置: 在php.ini中配置为:session.name = PHPSESSID 在请求开始的时候,会话名称会被重置并存储到session.name配置项. 所以要想在不改 ...