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的更多相关文章

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

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

  2. BZOJ3733 : [Pa2013]Iloczyn

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

  3. bzoj3733 [Pa2013]Iloczyn 搜索

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

  4. BZOJ 3733 [Pa2013]Iloczyn 模拟爆搜

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

  5. bzoj 3733: [Pa2013]Iloczyn【dfs】

    参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的 ...

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

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

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

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

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 【PA2013】【BZOJ3733】Iloczyn

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

随机推荐

  1. php-fpm进程数管理

    PHP-FPM 先来了解一些名词概念: CGI是Common Gateway Interface(通用网管协议),用于让交互程序和Web服务器通信的协议.它负责处理URL的请求,启动一个进程,将客户端 ...

  2. Python爬虫例子(笔记,不适合参考,愿意看的可以看看)

    话不多说,直接上代码: import re import csv #爬虫的一个小例子,爬的是百度贴吧(网页版)某个帖子的各个楼层的用户名,发言内容和发言时间(使用到了正则表达式) source3.tx ...

  3. oracle spool

    http://peter8015.iteye.com/blog/2082467 关于SPOOL(SPOOL是SQLPLUS的命令,不是SQL语法里面的东西.) 对于SPOOL数据的SQL,最好要自己定 ...

  4. 前端开发:JQuery(2)& Bootstrap

    JS事件流 事件的概念:HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件. 事件流: ...

  5. 新装mvn建第一个项目报错org.apache.maven.plugins:maven-resources-plugin:2.6

    1.第一次创建mvn项目会报maven-resources-plugin-2.6.jar错,原因是mvn无法自动下载这个jar包,多次删除这个目录下的C:\Users\Administrator\.m ...

  6. POJ 3518 (后缀自动机)

    POJ 3518 Boring Problem : 给一个串S,询问串S有多个子串出现至少两次且位置不重叠. Solution : 对S串建立后缀自动机,再建立后缀树,dfs一遍统计处每个结点的子树中 ...

  7. Linux网络设置

    ==========================网络设置========================== 1.IP地址 临时:ifconfig 192.168.124.129 永久: vi / ...

  8. python 安装依赖几个问题---HttpScan

    https://blog.csdn.net/chenggong2dm/article/details/61923420 https://www.cnblogs.com/caochuangui/p/59 ...

  9. Eclipse替换find/Replace

    使用快捷键:ctrl+F       replaceAll

  10. mysql计算两个日期之间的天数

    MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512')   2 ...