codeforces633D Fibonacci-ish map容器

来源:互联网 发布:幼儿园区域阅美工图片 编辑:程序博客网 时间:2024/05/17 01:54

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;}
0 0