codeforces633D Fibonacci-ish map容器

本文介绍了一种利用C++ STL中的map容器优化斐波那契数列查找效率的方法。通过实例展示了如何利用map进行数据存储与检索,并结合具体算法实现了对数时间复杂度的查找操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

map就是建一个红黑书 把每个元素的值都加进树种,当查找这个元素的值时算法复杂度logn
关于map的用法:
map<类型1,类型2> mp(名字) 初始化
mp.clear() 清空;
mp[下标] = 值
mp.begin();
mp.end();
mp.size();
mp.empty();
mp.count();
mp.find();
此题有几种情况:
1.f0 =0 f1 = 0
2.f0 = 0 f1 = x f2 =x 然后逐步递增或递减
3.f0 = x!=0 f1 = y!=0 这种情况正常思路 枚举看情况是否满足。。。

#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
map<int,int>mp;
map<int,int>mp2;
int n;
int main()
{
    long long a[2000];
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            mp[a[i]]++;
        }
        int ans = 2,z = mp[0];
        if(z>ans)ans = z;
        if(z)
        {
         for(int i=0;i<n;i++)
           if(a[i]){
              if(mp[a[i]]>1)
              {
                  int sum = 2;
                  long long f1 = 0,f2 = a[i];
                  while(mp[f1+f2])
                  {
                      sum++;
                      int t = f2;
                      f2 = f1+f2;
                      f1 = t;
                  }
                  if(sum>ans)ans = sum;
              }
           }
        }
        sort(a,a+n);
        for(int i=0;i<n;i++)
          if(a[i]&&a[i]!=a[i-1])
          {
             for(int j=0;j<n;j++)
             if(i!=j)
            {
                int sum = 2,f1 = a[i],f2 = a[j];
                bool sym  = false;
                mp2[f1]++;
                mp2[f2]++;
                while(mp2[f1+f2]!=mp[f1+f2])
                {
                    sum++;
                    mp2[f1+f2]++;
                    int t = f2;
                    f2 = f1+f2;
                    f1 = t;
                }
                if(sum>ans)ans = sum;
                    mp2.clear();
            }
        } 
        mp.clear();
        printf("%d\n",ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值