【CF633D】Fibonacci-ish
题目描述
小y最近迷上了fibonacci数列,他定义了一种数列叫类fibonacci数列:
1.这个数列包含至少\(2\)个元素
2.\(f_0\)和\(f_1\)是任意选取的
3.\(f_{n+2}=f_{n+1}+f_n (n\geq 0)\)
现在,给出一个数列\(a_1\ldots a_n\),你可以改变数列元素的顺序,使得\(a_1\ldots a_m\)满足类fibonacci数列的条件,请求出最大的\(m\)。
\(n\leq 1000\)
题解
如果有\(0\),就先统计\(0\)的个数,然后把这些\(0\)删掉。
首先这个东西的长度是\(O(\log a_i)\)的。
暴力枚举前两个,查找是否存在第三个。
可以预处理出来。
时间复杂度:\(O(n^2\log n)\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
ll a[510];
int b[510];
int n;
int c[510][510];
int d1[510];
int d2[510];
int e[510];
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int i,j,k;
scanf("%d",&n);
if(n==1)
{
printf("%d\n",0);
return 0;
}
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
int m=0;
for(i=1;i<=n;i++)
if(i==1||a[i]!=a[i-1])
{
d1[++m]=a[i];
d2[m]=1;
}
else
d2[m]++;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
k=lower_bound(d1+1,d1+m+1,d1[i]+d1[j])-d1;
if(k>m||d1[k]!=d1[i]+d1[j])
c[i][j]=0;
else
c[i][j]=k;
}
int ans=0;
for(i=1;i<=n;i++)
{
d2[i]--;
for(j=1;j<=n;j++)
if(d2[j])
{
d2[j]--;
for(k=1;k<=m;k++)
e[k]=d2[k];
ll s1=i;
ll s2=j;
int num=2;
while(c[s1][s2]&&e[c[s1][s2]])
{
e[c[s1][s2]]--;
swap(s1,s2);
s2=c[s1][s2];
num++;
}
ans=max(ans,num);
d2[j]++;
}
d2[i]++;
}
printf("%d\n",ans);
return 0;
}
【CF633D】Fibonacci-ish的更多相关文章
- 【HDU1848】Fibonacci again and again(博弈论)
[HDU1848]Fibonacci again and again(博弈论) 题面 Hdu 你有三堆石子,每堆石子的个数是\(n,m,p\),你每次可以从一堆石子中取走斐波那契数列中一个元素等数量的 ...
- 【HDU3117】Fibonacci Numbers
[HDU3117]Fibonacci Numbers 题面 求斐波那契数列的第\(n\)项的前四位及后四位. 其中\(0\leq n<2^{32}\) 题解 前置知识:线性常系数齐次递推 其实后 ...
- 【poj3070】 Fibonacci
http://poj.org/problem?id=3070 (题目链接) 题意 用矩阵乘法求fibonacci数列的第n项. Solution 矩乘入门题啊,题目把题解已经说的很清楚里= =. 矩乘 ...
- 【类似N^N做法的斐波那契数列】【HDU1568】 Fibonacci
Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【算法】Fibonacci(斐波那契数列)相关问题
一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...
- 【HDU 2855】 Fibonacci Check-up (矩阵乘法)
Fibonacci Check-up Problem Description Every ALPC has his own alpc-number just like alpc12, alpc55, ...
- 1643【例 3】Fibonacci 前 n 项和
1643:[例 3]Fibonacci 前 n 项和 时间限制: 1000 ms 内存限制: 524288 KB sol:这题应该挺水的吧,就像个板子一样 1 0 01 1 0 * ...
- 一本通1642【例 2】Fibonacci 第 n 项
1642: [例 2]Fibonacci 第 n 项 sol:挺模板的吧,经典题吧qaq (1) 1 0 * 1 1 = 1 1 1 0 (2) 1 1 * 1 ...
- 【CF914G】Sum the Fibonacci 快速??变换模板
[CF914G]Sum the Fibonacci 题解:给你一个长度为n的数组s.定义五元组(a,b,c,d,e)是合法的当且仅当: 1. $1\le a,b,c,d,e\le n$2. $(s_a ...
随机推荐
- OO博客作业2:第5-7周作业总结
(1)从多线程的协同和同步控制方面,分析和总结自己三次作业来的设计策略及其变化. 第5次作业:多线程电梯 基本照搬了课件上“生产者-消费者”模型的设计策略,将InputHandler设计为生产者线程, ...
- Linux查看端口
1.lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 2.netstat -tunlp |grep 端口号 用于查看指定的端口号的进程情况 ...
- 几何学观止(Lie群部分)
上承这个页面,这次把Lie群的部分写完了 几何学观止-微分几何部分(20181102).pdf 我觉得其他部分(尤其是代数几何部分)我目前没有把握写得令自己满意,总之希望在毕业前能写完吧. 这次调整了 ...
- adb命令集合
1. 获取序列号: adb get-serialno 2. 查看连接计算机的设备: adb devices 3. 重启机器: adb reboot 4. 重启到bootloader,即刷机模式: ad ...
- 二次剩余从csdn
欧拉准则 模\(p\)意义下,\(a\)是二次剩余等价于\(a^{\frac{p-1}{2}}\equiv 1\),\(a\)不是二次剩余等价于\(a^{\frac{p-1}{2}}\equiv -1 ...
- 牛客练习赛B题 筱玛的排列(找递推规律)
链接:https://ac.nowcoder.com/acm/contest/342/B来源:牛客网 筱玛的排列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语 ...
- matplotlib中subplot的使用
#plt.subplot的使用 import numpy as npimport matplotlib.pyplot as pltx=[1,2,3,4]y=[5,4,3,2]plt.subplot(2 ...
- 通过设置线程池的最小线程数来提高task的效率,SetMinThreads。
http://www.cnblogs.com/Charltsing/p/taskpoolthread.html task默认对线程的调度是逐步增加的,连续多次运行并发线程,会提高占用的线程数,而等若干 ...
- 记第一次多用户在Git提交代码
今天第一次进行了多用户(其实就两人)在自建Git服务器提交代码. 先记录碰到的问题:首先是本地提交代码时,进行了add,commit后,在push时碰到服务器故障,待设置好服务器后,再push时,却p ...
- python文件封装成*.exe文件(单文件和多文件)
环境:win10 64位 python3.7 单*.py文件打包Python GUI:程序打包为exe 一.安装Pyinstaller,命令pip install Pyinstaller,(大写的P ...