BZOJ 3713: [PA2014]Iloczyn( 枚举 )

斐波那契数列<10^9的数很少很少...所以直接暴力枚举就行了...

-------------------------------------------------------------

#include<cstdio>

#include<algorithm>

#include<cstring>

#include<iostream>

#define rep( i , n ) for( int i = 0 ; i < n ; ++i )

#define Rep( i , n ) for( int i = 0 ; i <= n ; ++i )

#define clr( x , c ) memset( x , c , sizeof( x ) )

using namespace std;

const int N = int( 1e9 ) + 7;

int seq[ 1000 ] , cnt = 0;

int main() {

freopen( "test.in" , "r" , stdin );

seq[ 0 ] = 0 , seq[ 1 ] = 1;

for( cnt = 2 ; seq[ cnt - 1 ] < N ; cnt++ )

seq[ cnt ] = seq[ cnt - 1 ] + seq[ cnt - 2 ];

int t;

cin >> t;

while( t-- ) {

long long x;

bool flag = false;

scanf( "%lld" , &x );

Rep( i , cnt ) if( seq[ i ] <= x )

for( int j = i; j <= cnt ; j++ ) if( 1LL * seq[ i ] * seq[ j ] ==  x ) flag = true;

printf( flag ? "TAK" : "NIE" );

putchar( ‘\n‘ );

}

return 0;

}

-------------------------------------------------------------

3713: [PA2014]Iloczyn

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 344  Solved: 191
[Submit][Status][Discuss]

Description

斐波那契数列的定义为:k=0或1时,F[k]=k;k>1时,F[k]=F[k-1]+F[k-2]。数列的开头几项为0,1,1,2,3,5,8,13,21,34,55,…你的任务是判断给定的数字能否被表示成两个斐波那契数的乘积。

Input

第一行包含一个整数t(1<=t<=10),表示询问数量。接下来t行,每行一个整数n_i(0<=n_i<=10^9)。

Output

输出共t行,第i行为TAK(是)或NIE(否),表示n_i能否被表示成两个斐波那契数的乘积。

Sample Input

5
5
4
12
11
10

Sample Output

TAK
TAK
NIE
NIE
TAK

HINT

Source

鸣谢Jcvb

时间: 2024-12-27 22:54:14

BZOJ 3713: [PA2014]Iloczyn( 枚举 )的相关文章

BZOJ 3713: [PA2014]Iloczyn

Description 斐波那契数列的定义为:k=0或1时,F[k]=k:k>1时,F[k]=F[k-1]+F[k-2].数列的开头几项为0,1,1,2,3,5,8,13,21,34,55,-你的任务是判断给定的数字能否被表示成两个斐波那契数的乘积. Input 第一行包含一个整数t(1<=t<=10),表示询问数量.接下来t行,每行一个整数n_i(0<=n_i<=10^9). Output 输出共t行,第i行为TAK(是)或NIE(否),表示n_i能否被表示成两个斐波那契数

3713: [PA2014]Iloczyn

3713: [PA2014]Iloczyn Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 327  Solved: 181[Submit][Status][Discuss] Description 斐波那契数列的定义为:k=0或1时,F[k]=k:k>1时,F[k]=F[k-1]+F[k-2].数列的开头几项为0,1,1,2,3,5,8,13,21,34,55,…你的任务是判断给定的数字能否被表示成两个斐波那契数的乘积. Input 第一行包含一个

bzoj3713[PA2014]Iloczyn*

bzoj3713[PA2014]Iloczyn 题意: 判断给定的数字能否被表示成两个斐波那契数的乘积.n≤10^9 题解: 开始在想有没有什么根号级算法,后来想知道斐波那契数列10000位有多大,结果爆long long了……实际上斐波那契数列到45位就大于10^9了.所以直接枚举即可. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define inc(i,j,k) fo

BZOJ 1050 旅行comf(枚举最小边-并查集)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1050 题意:给出一个带权图.求一条s到t的路径使得这条路径上最大最小边的比值最小? 思路:将边排序.枚举最小边,然后将边一个一个插到并查集里,s和t联通时计算更新答案. struct node { int u,v,w; void get() { RD(u,v,w); } }; int cmp(node a,node b) { return a.w<b.w; } int n,m,s,t;

BZOJ 3709: [PA2014]Bohater

题目 3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 507  Solved: 163[Submit][Status] Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号).为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值.任何时候你的生命值都不能降到0(或0以下).请问是否存在一种打怪顺序,使得你可以

BZOJ 3714: [PA2014]Kuglarz

呃..好像弃坑了好久=v=..本来打算在bzoj每刷10题合起来写一份题解..但是1个月好像还刷不到10题的样子(水题除外),所以还是单独写一下题解.. Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,-,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+1,-,j底下藏有球的总数的奇偶性.采取最优的询问策略,你至少需要花费多少元,才能保证猜出哪些杯子底下藏着球? Input 第一行一个整数n(1<

BZOJ 1177 Oil(特技枚举)

对于三个正方形的位置一共有六种情况. 预处理出(i,j)左上角,左下角,右上角,右下角区域内最大权值的正方形. 枚举分界线更新答案. 刚开始想了一个错误的DP也是蠢啊. #include<set> #include<map> #include<ctime> #include<queue> #include<cmath> #include<cstdio> #include<vector> #include<cstrin

【贪心】bzoj 3709:[PA2014]Bohater

3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 653  Solved: 220[Submit][Status][Discuss] Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号).为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值.任何时候你的生命值都不能降到0(或0以下).请问是否存在一种打怪顺序

bzoj 3714 [PA2014]Kuglarz 最小生成树

[PA2014]Kuglarz Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1335  Solved: 672[Submit][Status][Discuss] Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+1,…,j底下藏有球的总数的奇偶性.采取最优的询问策略,你至少需要花费多少元,才能保证