Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- #include <queue>
- #include <set>
- #include <map>
- #include <cstdio>
- #include <cstdlib>
- #include <cctype>
- #include <cmath>
- using namespace std;
- typedef long long LL;
- #define FOR(k,a,b) for(int k(a); k < (b); ++k)
- #define REP(k,a) for(int k=0; k < (a); ++k)
- class SubFibonacci {
- vector<LL> mS;
- vector<LL> fib;
- vector<pair<LL,LL> > fibpairs;
- map<LL,int> mMap;
- int n,m;
- int calc(int start,int end)
- {
- ++end;
- int res=2;
- FOR(i,start,end)
- FOR(j,start,end)
- if(i!=j)
- {
- FOR(k,0,2)
- FOR(l,0,m)
- // fibpairs[k].first*x+fibpairs[k].second*y = mS[i]
- // fibpairs[l].first*x+fibpairs[l].second*y = mS[j]
- if(k!=l)
- {
- LL x,y;
- if(k==0)
- {
- x=mS[i];
- y=(mS[j]-fibpairs[l].first*mS[i]);
- if(y>0 && (y%fibpairs[l].second)==0)
- y/=fibpairs[l].second;
- else
- continue;
- }
- if(k==1)
- {
- y=mS[i];
- x=mS[j]-fibpairs[l].second*mS[i];
- if(x>0 && (x%fibpairs[l].first==0))
- x/=fibpairs[l].first;
- else
- continue;
- }
- LL ttmp,last=0;
- int tmpres=0;
- REP(ttt,fibpairs.size())
- {
- ttmp=fibpairs[ttt].first*x+fibpairs[ttt].second*y;
- if (mMap.count(ttmp) && mMap[ttmp]>=start && mMap[ttmp]<end && ttmp>last)
- {
- ++tmpres;
- last=ttmp;
- }
- }
- if (tmpres>res)
- res=tmpres;
- }
- }
- return res;
- }
- public:
- int maxElements(vector <int> S) {
- sort(S.begin(),S.end());
- n=S.size();
- mS.resize(n);
- REP(i,n)
- {
- mS[i]=S[i];
- mMap[S[i]]=i;
- }
- const LL mMax=100000001;
- int res=min(4,n);
- fib.resize(2,1);
- while(fib.back()<mMax)
- fib.push_back(fib[fib.size()-2]+fib[fib.size()-1]);
- m=fib.size();
- fibpairs.resize(m);
- fibpairs[0]=make_pair(1,0);
- fibpairs[1]=make_pair(0,1);
- FOR(i,2,m)
- {
- fibpairs[i]=make_pair(fib[i-2],fib[i-1]);
- }
- FOR(i,2,n-2)
- {
- int tmp=calc(0,i)+calc(i+1,n-1);
- if (tmp>res)
- res=tmp;
- }
- return res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment