3713: [PA2014]Iloczyn
时间:2022-05-08
本文章向大家介绍3713: [PA2014]Iloczyn,主要内容包括3713: [PA2014]Iloczyn、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
3713: [PA2014]Iloczyn
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 327 Solved: 181
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
题解:一开始我还想着怎么预处理,但是后来发现貌似也就( log M )个数字(虽然显然没这么少,但实际上也就不超过60个的样子)在( {10}^{9} )一下,然后( T leq 10 ),暴力枚举轻松水过(PS:呵呵呵逗比的我还用了个平衡树来维护,但后来才想到貌似二分查找就够了= =)
1 /**************************************************************
2 Problem: 3713
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:0 ms
7 Memory:244 kb
8 ****************************************************************/
9
10 var
11 a:array[0..1000] of int64;
12 lef,rig,fix:array[0..1000] of longint;
13 i,j,k,l,m,n,head,t:longint;
14 a1:int64;
15 procedure rt(var x:longint);
16 var f,l:longint;
17 begin
18 if (x=0) or (lef[x]=0) then exit;
19 f:=x;l:=lef[x];
20 lef[f]:=rig[l];
21 rig[l]:=f;
22 x:=l;
23 end;
24 procedure lt(var x:longint);
25 var f,r:longint;
26 begin
27 if (x=0) or (rig[x]=0) then exit;
28 f:=x;r:=rig[x];
29 rig[f]:=lef[r];
30 lef[r]:=f;
31 x:=r;
32 end;
33 procedure ins(var x:longint;y:longint);
34 begin
35 if x=0 then
36 begin
37 x:=y;
38 exit;
39 end;
40 if a[y]<=a[x] then
41 begin
42 if lef[x]=0 then lef[x]:=y else ins(lef[x],y);
43 if fix[lef[x]]<fix[x] then rt(x);
44 end
45 else
46 begin
47 if rig[x]=0 then rig[x]:=y else ins(rig[x],y);
48 if fix[rig[x]]<fix[x] then lt(x);
49 end;
50 end;
51 function check(x:longint;y:int64):boolean;
52 begin
53 if x=0 then exit(false);
54 if a[x]=y then exit(true);
55 if y<a[x] then exit(check(lef[x],y)) else exit(check(rig[x],y));
56 end;
57 begin
58 a[1]:=0;a[2]:=1;head:=0;randomize;
59 for i:=3 to 60 do a[i]:=a[i-1]+a[i-2];
60 for i:=1 to 60 do
61 begin
62 lef[i]:=0;rig[i]:=0;fix[i]:=random(maxlongint);
63 ins(head,i);
64 end;
65 readln(t);
66 while t>0 do
67 begin
68 readln(a1);
69 if a1=0 then writeln('TAK') else
70 begin
71 j:=0;
72 for i:=2 to 60 do
73 begin
74 if a[i]>a1 then break;
75 if (a1 mod a[i])<>0 then continue;
76 if check(head,a1 div a[i]) then
77 begin
78 j:=1;writeln('TAK');
79 break;
80 end;
81 end;
82 if j=0 then writeln('NIE');
83 end;
84 dec(t);
85 end;
86 readln;
87 end.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- springmvc之RequestMapping中的请求方式
- 拥抱STL - union,天作之秀
- 拥抱STL -typename该怎么理解
- 走近STL - map,只愿一键对一值
- springmvc之使用servlet原生API作为参数
- 走近STL - 填上list删除的大坑
- springmvc之RequestMapping中的请求参数和请求头
- springmvc之RequestMapping结合@PathVariable使用
- springmvc之CookieValue注解
- springmvc之处理模型数据ModelAndView
- springmvc之异常处理ResponseStatusExceptionResolver
- Java矩阵快速幂实现
- 走近STL -- 你好,List
- 我能看懂的MakeFile(自命名,多文件,多目标)
- Posix信号量与cond条件变量,到底该选谁?