HDU_5167_Fibonacci
来源:互联网 发布:c语言进阶书籍 编辑:程序博客网 时间:2024/03/29 22:38
HDU 5167
题意:判断一个数(0≤n≤1,000,000,000)能否表示成菲波数的乘积(即该数的所有因子都是菲波数);思路:先把0≤n≤1,000,000,000内的菲波数放到一个数组中,再在对该数的分解时dfs。
#include <iostream>#include <iomanip>#include <cstring>#include <cstdio>#include <cstdlib>#include <cmath>#include <set>#include <map>#include <list>#include <stack>#include <deque>#include <queue>#include <vector>#include <algorithm>#include <functional>#define PI acos(-1.0)#define eps 1e-10#define INF 0x7fffffff#define debug(x) cout << "--------------> " << x << endltypedef long long LL;typedef unsigned long long ULL;using namespace std;long long fibo[50];int mark[100001] = {0};bool dfs(LL num, int k){ if (num < 100001 && mark[num] != 0) { return mark[num] - 1; } if (num == 1) { return 1; } for (int i = k; i > 2; --i) if (num % fibo[i] == 0 && dfs(num / fibo[i], i)) { if (num < 100001) { mark[num] = 2; } return 1; } if (num < 100001) { mark[num] = 1; } return 0;}int main(){ fibo[0] = 0; fibo[1] = 1; for (int i = 2; i < 50; ++i) { fibo[i] = fibo[i - 1] + fibo[i - 2]; } int T; scanf("%d", &T); LL num; while (T--) { scanf("%lld", &num); if (num == 0 || num == 1) { printf("Yes\n"); } else { dfs(num, 45) ? printf("Yes\n") :printf("No\n"); } } return 0;}
0 0
- HDU_5167_Fibonacci
- 毫秒-date互相转换
- Idea 创建文件夹时将目录结构由点连接改为树形结构
- linux源码
- css position: fixed; 垂直居中,绝对定位居中
- Mysql The server quit without updating PID file 解决方法
- HDU_5167_Fibonacci
- 美丽的月亮拍摄问题
- 第3章 里氏替换原则(LSP)
- java小白笔记--XML
- Python爬虫学习
- android 小知识点
- Ubuntu Server 16.04.1 LTS 使用手记
- 【noip 2015】信息传递 dfs
- Unity 解决UI点击穿透问题