bzoj3733 [Pa2013]Iloczyn 搜索
正解:搜索
解题报告:
先放下传送门QwQ
umm其实并不难,,,最近在复健基础姿势点所以都写的是些小水题QAQ
首先考虑如果能构造出来一定是因数凑起来鸭,所以先把因数都拆出来,然后就爆搜
几个常见的剪枝就不说了,想cue下最近碰到了好几次的一个
是这样儿的,就以这题为例,可以对所有因数排序,强制从小到大选这种我就不说了太套路了,有一个小check是可以计算出还要乘几个数嘛,这里设已经算出来了是x,然后就把已经乘出来了的数乘以当前最小的x个数,如果大于目标就可以break了
感觉最近碰到了好几次,,,?就栅栏那题,也用到了来着
然后这题有个小坑点,,,我被卡了半个小时TT
好趴其实不是坑是我傻逼,,,就乘法记得开ll,,,只要是乘法都顺手开个就是了TT
没了QAQ
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ll i=x;i<=y;++i)
#define my(i,x,y) for(ll i=x;i>=y;--i) const int N=+;
int n,K,invv[N],inv_cnt; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool dfs(ri nw,ri num,ri sum)
{
if(num==K && sum==n)return true;
if(num>=K)return false;
if(nw>inv_cnt)return false;
if(inv_cnt-nw+<K-num)return false;
ri tmp=sum;
rp(i,nw,nw+K-num-)if(1ll*tmp*invv[i]>n)return false;else tmp=1ll*tmp*invv[i];
if(dfs(nw+,num,sum))return true;if(dfs(nw+,num+,sum*invv[nw]))return true;return false;
}
il void jud(ri x)
{
inv_cnt=;for(ri i=;i*i<=x;++i){if(!(x%i)){invv[++inv_cnt]=i;if(i*i!=x)invv[++inv_cnt]=x/i;}}sort(invv+,invv++inv_cnt);
if(dfs(,,))return void(printf("TAK\n"));printf("NIE\n");
} int main()
{
// freopen("bzoj3373.in","r",stdin);freopen("bzoj3373.out","w",stdout);
int T=read();
while(T--){n=read(),K=read();jud(n);}
return ;
}
放下代码嗷
bzoj3733 [Pa2013]Iloczyn 搜索的更多相关文章
- BZOJ3733 : [Pa2013]Iloczyn
首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能. 爆搜的时候,如果从$x$开始最小的$y$个相乘也超过 ...
- 【BZOJ3733】[Pa2013]Iloczyn (搜索)
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...
- 【PA2013】【BZOJ3733】Iloczyn
Description 给定正整数n和k,问是否能将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示測试组数 接下来T行每行两个数n(n<=10^9),k(k ...
- BZOJ 3733 [Pa2013]Iloczyn 模拟爆搜
Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...
- [Pa2013]Iloczyn
https://www.zybuluo.com/ysner/note/1300802 题面 给定正整数\(n\)和\(k\),问能否将\(n\)分解为\(k\)个不同正整数的乘积. \(n\leq10 ...
- bzoj 3733: [Pa2013]Iloczyn【dfs】
参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的 ...
- [bzoj3733]Iloczyn 题解(搜索剪枝)
3733: [Pa2013]Iloczyn Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 741 Solved: 217[Submit][Statu ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- Ubuntu和centos离线安装软件包(apt和yum)
linux安装软件包要解决包依赖问题,不能简单安装包本身. 离线安装基本思想都是先在一台设备上安装下载所有依赖包,然后拷贝所有依赖包到新设备上安装. Ubuntu下apt离线安装包 执行apt upd ...
- Android GIS +webservice
Android新手经典入门教程 Android开发教程(完全免费版) Android SDK v3.1.0 Android定位功能(一) Android定位功能(二) Android 百度地图开发(一 ...
- file_name[:-4]
file_name: chair_0001.off file_name[:-4] : chair_0001
- [Unity3D] 05 - Access to DB or AWS
可以选择连接本地服务器,或者云服务器. 参考源代码 : https://www.cnblogs.com/wuzhang/p/wuzhang20141202.html (1) 功能:点击一下按键,然后访 ...
- Python version 2.7 required, which was not found in the registry解决方法
转自:https://blog.csdn.net/zklth/article/details/8117207 新建一个register.py文件,执行该文件,完成python的注册. import s ...
- 《转载》python爬虫实践之模拟登录
有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录. 浏览器访问服务器的过程 在用户访问网页时,不论是通过URL输入域名或IP ...
- distri.lua线程间通信的设计
首先简单介绍下distri.lua中的线程设计方案. distri.lua提供一个API函数fork用于创建新的C线程,这个C线程运行独立的lua虚拟机,为了在各线程之间通信 每个线程都会创建一个ch ...
- 一篇文章带你看懂Cloudflare信息泄露事件
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/753847001488039974 来源:腾云阁 ...
- 8月10日CSS总结
1.三角形光标转换 CSS: .one{ width: 0; height: 0; border-top: 100px solid #000; border-right:100px solid t ...
- 面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
class Ren { private $name; private $sex; private $age; //年龄必须在18-50之间 function __constuct($v) { $thi ...