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. virtualbox虚拟机桥接方式网络设置

    一.编辑网卡 cd   /etc/sysconfig/network-scripts 查看本地win10ip及子网掩码: 如果查看到的ip不是192开头的,可以手动设置为192开头的ip 2.设置虚拟 ...

  2. js中给正则传参、传递变量

    js中验证字符串有时需要用到正则表达式,一般情况下直接写正则进行验证就行. 但是遇到需要把部分正则作为参数传递就麻烦一点,需要用到RegExp()对象. <script type="t ...

  3. stark组件之添加、修改页面内容搭建(七)

    如何快速的进行数据的添加以及修改呢?modelform来实现是可以达到效果的,在这里就是应用了modelform,每一个表都不同,所以需要创建不同的modelform. def get_model_f ...

  4. Django 模版语法 一

    创建项目 django_template 和 app django-admin startproject django_template python manage.py startapp app01 ...

  5. 集训第五周动态规划 F题 最大子矩阵和

    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...

  6. C#上位机开发(四)—— SerialAssistant功能完善

    上一篇中我们完成了一个串口助手的雏形,实现了基本发送和接收字符串功能,并将打开/关闭串口进行了异常处理,这篇就来按照流程,逐步将功能完善: 1.构思功能 首先是接收部分,要添加一个“清空接收”的按钮来 ...

  7. 关于 <customErrors> 标记的“mode”属性设置为“Off”的问题的解决方案

    用 权限问题 <customErrors> 标记的“mode”属性设置为“Off”. 权限问题标记的“mode”属性设置为“Off”.说明: 服务器上出现应用程序错误.此应用程序的当前自定 ...

  8. Mysql学习总结(43)——MySQL主从复制详细配置

    环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168.1.205 主机名:edu-mysql ...

  9. 1016-Prime Ring Problem,素数环,深搜!

    Prime Ring Problem                                                                                   ...

  10. 2018/2/16 解析Logback的AppenderBase源码,并举一反三的实现Logback扩展功能的思路,以及它的实际业务应用场景

    在学习Logback的过程中,知道了它有一个可以将日志往第三方数据源写的功能,这个功能的实现就是这个AppenderBase类,不禁想看看它的源码. 下面是AppenderBase类的所有子类(也就是 ...