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. flask_sqlaichemy的json字段

    https://segmentfault.com/q/1010000009304667/a-1020000009404847

  2. kafka-stream数据清洗

    1.数据清洗业务类LogProcessor package com.css.kafka.kafka_stream; import org.apache.kafka.streams.processor. ...

  3. leetcode 旋转单链表

    Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: I ...

  4. opencv亚像素级角点检测

    一般角点检测: harris cv::cornerHarris() shi-tomasi cv::goodFeaturesToTrack() 亚像素级角点检测是在一般角点检测基础之上将检测出的角点精确 ...

  5. VUE的安装与Django之间打通数据

    一  VUE的安装与项目创建 1.1.安装nodeJS 官网下载安装:https://nodejs.org/zh-cn/ 1.2.安装脚手架 vue官网 => 学习 => 教程 => ...

  6. VS安装程序制作之MSI/EXE

    MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据.MSI文件将程序的组成文件与功能关联起来 ...

  7. Centos Docker1.12 远程Rest api访问的配置方法

    Docker默认是没有开启HTTP远程访问的,默认只支持通过unix socket通信操作docker daemon,需要使用HTTP restful接口需要修改配置. 1.修改配置文件,文件位置/l ...

  8. Spring基本功能-IOC

    一.SpringIOC Spring的控制反转:把对象的创建,初始化,销毁的过程交给SpringIOC容器来做,由Spring容器控制对象的生命周期. 1.1 启动Spring容器的方式: (1)加载 ...

  9. 查看Oracle latch _spin_count默认值

    查看Oracle latch  _spin_count默认值 SELECT X.KSPPINM NAME, Y.KSPFTCTXVL VALUE, Y.KSPFTCTXDF ISDEFAULT FRO ...

  10. win7 64bits下编译libjpeg库

    一.下载源代码.下载地址:http://www.ijg.org/.注意:一定要下载win32 版本二.编译源代码.       1.解压源代码,(不需要修改,修改报错)修改源代码中jconfig.vc ...