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. Nginx出现403 forbidden (13: Permission denied)报错的四种原因

    一.由于php-fpm启动用户和nginx工作用户不一致所致 php-fpm启动用户配置位置 nginx工作用户配置位置 二.不存在在文件,可能是文件路径有误,可以查看nginx错误日志来判断 三.缺 ...

  2. Python之爬虫-酷6视频

    Python之爬虫-酷6视频 #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requests response = req ...

  3. 记一次C++编程引用obj文件作为静态库文件

    简介 常用静态库文件的名字一般是 ***.lib ,例如 nisyscfg.lib 就是一个静态库文件,但是一个例程居然是引用 **.obj 文件作为静态库,有点非常规啊. 这是一个NI488.2 的 ...

  4. Python操作Redis、Memcache

       今天主要介绍如何通过python来对Redis和memcache进行操作,下面开始今天的内容: 一.Memcached操作 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web ...

  5. IntelliJ IDEA 13.1.1版本偶然的错误

    总之很悲催也很浪费时间,这款软件很喜欢,不想卸载 图片中的style.css使得style.css一直是文本形式 将style.css删除就恢复正常了,这个错误弄了半天才搞定,心累.

  6. 用mycat做读写分离:基于 MySQL主从复制

    版权声明:本文为博主原创文章,未经博主允许不得转载. mycat是最近很火的一款国人发明的分布式数据库中间件,它是基于阿里的cobar的基础上进行开发的 搭建之前我们先要配置MySQL的主从复制,这个 ...

  7. HDU 1079 简单博弈

    判断下一步能否到达必胜态,如果可以当前状态就是必败态,否则当前状态记为必胜态 #include <cstdio> #include <cstring> #include < ...

  8. linux程序分析工具

    ldd和nm是Linux下两个非常实用的程序分析工具.ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具,objdump用来查看源代码与汇编代码,-d只查 ...

  9. hosts.allow和hosts.deny文件

    之前想通过外部主机访问自己主机上的VMWare虚拟机,使用了VMWare的NAT端口映射,经过一番尝试,算是成功了,总结一下. VMWare NAT端口映射就可以将虚拟机上的服务映射成自己主机上的端口 ...

  10. hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...