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的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
随机推荐
- 由object元素引出的事件注册问题和层级显示问题
项目有一个双击监控视频全屏的需求,视频播放使用的是IE下的ActiveX控件,web页面中使用HTML嵌入对象元素object.预期方案如下: 1.在开发ActiveX控件时加入双击事件. 2.通过d ...
- 一种比使用协程更方便的方法:Invoke(),同样达到等待执行的效果
1.Invoke(string methodName,float time) 在一定时间调用methodName函数 using UnityEngine; using System.Collectio ...
- 编写Makefile规则
一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 ...
- 字符编码——python学习
python学习—字符编码 例如汉字“中” 十进制:20013 二进制:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8) 十六进 ...
- golang 切片小记
1 切片初始化 func printSlice(s []int) { fmt.Printf("len=%d cap=%d underlying array:%p, %v\n", l ...
- 选择区域缩放Flex Chart
http://www.riafan.com/zoom-chart/ 演示地址: http://www.riafan.com/flash/zoomchart/ 下载地址: http://www.riaf ...
- 20155315 2016-2017-2 《Java程序设计》第四周学习总结
教材学习内容总结 1.继承与多态 Java中只有单一继承,也就是只能有一个父类; 多态即指一个父类可由多个子类继承. 继承可以复用代码,更大的用处是实现「多态」. 封装是继承的基础,继承是多态的基础 ...
- 20155217 实验四《Java面向对象程序设计》实验报告
20155217 实验四<Java面向对象程序设计>实验报告 一.实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局 ...
- RHSCA模拟考试
开始考试:桌面是个黑框子 点击reboot按钮,破解密码 开机成功,输入startx进入图形界面 不能复制,要在物理机用ssh root@172.25.0.11 远程连接,就可以复制粘贴了 * Hos ...
- Docker入门篇(三)之docker-compose单机编排
1.docker-compose的简介 docker-compose作为dokcer的官方编排工具,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于docker容器的应用集群.实现对doc ...