• 【CF633D】Fibonacci-ish


    题目描述

      小y最近迷上了fibonacci数列,他定义了一种数列叫类fibonacci数列:

       1.这个数列包含至少(2)个元素

       2.(f_0)(f_1)是任意选取的

       3.(f_{n+2}=f_{n+1}+f_n (ngeq 0))

      现在,给出一个数列(a_1ldots a_n),你可以改变数列元素的顺序,使得(a_1ldots a_m)满足类fibonacci数列的条件,请求出最大的(m)

      (nleq 1000)

    题解

      如果有(0),就先统计(0)的个数,然后把这些(0)删掉。

      首先这个东西的长度是(O(log a_i))的。

      暴力枚举前两个,查找是否存在第三个。

      可以预处理出来。

      时间复杂度:(O(n^2log 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
    ",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
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    技术文章阅读-Pi-Hole < 4.3.2 Command Injection & PrivEsc (CVE-2019-13051)
    技术文章阅读-d-link-routers-found-vulnerable-rce
    技术文章阅读-蜂网互联企业级路由器v4.31密码泄露漏洞
    使用mkcert工具自签https证书
    查询给定时间是否在当前周
    nodeJS 一些笔记
    手机端页面布局方案
    关于HTML5的应用缓存功能
    将伪数组转换为数组的方法
    Cookies的使用之购物车的实现
  • 原文地址:https://www.cnblogs.com/ywwyww/p/8511394.html
Copyright © 2020-2023  润新知