HDU 5167 Fibonacci 筛法+乱搞
题目链接:
hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5167
题意:
给你一个x,判断x能不能由斐波那契数列中的数相乘得到(一个数可以重复使用)
题解:
1、筛法
首先,小于10^9的斐波那契数很少,就42个(不包括0,1),对于给定的x能同时成为它的因子的斐波那契数更少,所以可以暴力考虑所有能整除x的斐波那契数组成的集合的所有子集。
但是,对于每个子集做筛法的时候必须从大的数开始筛(质因数分解可以随便筛是因为一个数的质因数分解具有唯一性,但这里并不具有唯一性),因为大的数比小的数更特别,它可能具有小的数不具备的组成x的质因子,如果它具备独特质因子,那它就要筛到不能筛为止,如果它不具备独特质因子,它多筛了也不影响的,所以从大到小的做保证了正确的分解不会丢失。
68=2*34=2*2*17,如果从小到大筛,会把2全筛了,剩下个17是没办法筛掉的,而如从后往前则会先筛掉34,再筛掉一个2,这样就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL; const int maxn = ; int fib[maxn]; int tot;
void get_fib() {
fib[] = , fib[] = ;
for (tot = ;; tot++) {
fib[tot] = fib[tot - ] + fib[tot - ];
if (fib[tot] >) break;
}
} int di[maxn], n; void init() {
n = ;
} int main() {
get_fib();
int tc;
scanf("%d", &tc);
while (tc--) {
init();
int x;
scanf("%d", &x);
if (x == ||x==) {
puts("Yes"); continue;
}
for (int i = ; i < tot; i++) {
if (x%fib[i] == ) {
di[n++] = fib[i];
}
}
bool su = false;
for (int stat = ; stat < ( << n); stat++) {
int tmp = x;
for (int i = n-; i >=; i--) {
if (stat&( << i)) {
while (tmp%di[i] == ) tmp /= di[i];
}
}
if (tmp == ) {
su = true; break;
}
}
if (su) puts("Yes");
else puts("No");
}
return ;
}
/*
68
*/
2、直接暴搜
看完题解哭晕。。
而且跑的溜溜的orz
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL; const int maxn = ; int fib[maxn]; int tot;
void get_fib() {
fib[] = , fib[] = ;
for (tot = ;; tot++) {
fib[tot] = fib[tot - ] + fib[tot - ];
if (fib[tot] >) break;
}
} int di[maxn], n; bool dfs(int cur, int x) {
if (x == ) return true;
if (cur == n) return false;
if (dfs(cur + , x)) return true; if (x%di[cur]==) {
int tmp = x;
while (tmp%di[cur] == ) {
tmp /= di[cur];
//printf("tmp:%d\n", tmp);
if (dfs(cur + , tmp)) return true;
}
}
return false;
} void init() {
n = ;
} int main() {
get_fib();
int tc;
scanf("%d", &tc);
while (tc--) {
init();
int x;
scanf("%d", &x);
if (x == ||x==) {
puts("Yes"); continue;
}
for (int i = ; i < tot; i++) {
if (x%fib[i] == ) {
di[n++] = fib[i];
}
}
//printf("n:%d\n", n);
if (dfs(,x)) puts("Yes");
else puts("No");
}
return ;
}
HDU 5167 Fibonacci 筛法+乱搞的更多相关文章
- hdu 4786 Fibonacci Tree 乱搞 智商题目 最小生成树
首先计算图的联通情况,如果图本身不联通一定不会出现生成树,输出"NO",之后清空,加白边,看最多能加多少条,清空,加黑边,看能加多少条,即可得白边的最大值与最小值,之后判断Fibo ...
- hdu 5167 Fibonacci 打表
Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Proble ...
- hdu 5167 Fibonacci(预处理)
Problem Description Following is the recursive definition of Fibonacci sequence: Fi=⎧⎩⎨01Fi−1+Fi−2i ...
- BZOJ-1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法+乱搞
1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 1383 Solved: 7 ...
- HDU 4614 Vases and Flowers(线段树+记录区间始末点或乱搞)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题目大意:有n个空花瓶,有两种操作: 操作①:给出两个数字A,B,表示从第A个花瓶开始插花,插B ...
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 5246 乱搞
题意:题目太长直接看链接 链接:点我 乱搞题 显然,一个人要想成功,必须大于等于最强的人的战斗力,所以我们从后往前看 这里直接拿例1解释,首先递减排个序 15,13,10,9,8 作差得2,3,1,1 ...
- URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
- UVA 11853 [dfs乱搞]
/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
随机推荐
- 服务端接收不到ajax post请求的参数
问题描述 服务端使用request.getParameter()接收不到post请求的参数,导致业务逻辑抛出空指针异常. 解决途径 tomcat对post请求支持的字节数不受限制的配置发生变化.在to ...
- Java实例 Part3:流程控制
目录 Example01:判断某一年是否为闰年 Example02:验证登录信息的合法性 Example03:判断用户输入月份的季节 Example04:使用while循环语句与自增运算符循环遍历数组 ...
- 消除运行MATLAB生成独立可执行程序的DOS黑屏
基于Matlab生成独立可执行文件后,每次运行都存在DOS黑屏问题,可通过以下方法解决: 在Matlab命令窗口中输入: cd(prefdir) edit compopts.bat 在打开的文件最后添 ...
- drag element
<div id="logDiv" draggable="true" style="border: 2px dotted red; width: ...
- React 组件间通信
https://jsfiddle.net/69z2wepo/9719/ <script src="https://facebook.github.io/react/js/jsfiddl ...
- IDEA-Debug调试操作
基本概念 快捷键和eclipse还是有区别的,不过基本概念是相通的 Step into F7 单步调试进入函数内部. Step over F8 单步调试不进入函数内部,如果装了金山词霸2006则 ...
- 【代码沉淀】 - EPPlus - 操作xlsx表格文件
EPPlus - Create advanced Excel spreadsheets on the server.web: http://epplus.codeplex.com/nuget: Ins ...
- Dlib简介及在windows7 vs2013编译过程
Dlib是一个C++库,包含了许多机器学习算法.它是跨平台的,可以应用在Windows.Linux.Mac.embedded devices.mobile phones等.它的License是Boos ...
- TMS320VC5509驱动LCD1602
1. 本次使用5509芯片的EMIF接口,先看下硬件的接口 LCD1602接口 RS(高电平1数据寄存器,低电平0指令寄存器) 接A2接口 LCD1602接口 RW(高电平读,低电平写) 接 AW ...
- 【Excel函数】如何在excle区分一列数字是否连续
需求:区分这批卡号,哪些在一个号段 数据源: 89860616090033685544898606160900336855518986061609003368556989860616090033685 ...