日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【CodeForces - 633D】Fibonacci-ish (离散化,暴力枚举+STPmap,fib数列收敛性质)

發(fā)布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CodeForces - 633D】Fibonacci-ish (离散化,暴力枚举+STPmap,fib数列收敛性质) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題干:

Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a sequence Fibonacci-ish if

  • the sequence consists of at least two elements
  • f0?and?f1?are arbitrary
  • fn?+?2?=?fn?+?1?+?fn?for all?n?≥?0.
  • You are given some sequence of integers?a1,?a2,?...,?an. Your task is rearrange elements of this sequence in such a way that its longest possible prefix is Fibonacci-ish sequence.

    Input

    The first line of the input contains a single integer?n?(2?≤?n?≤?1000)?— the length of the sequence?ai.

    The second line contains?n?integers?a1,?a2,?...,?an?(|ai|?≤?109).

    Output

    Print the length of the longest possible Fibonacci-ish prefix of the given sequence after rearrangement.

    Examples

    Input

    3 1 2 -1

    Output

    3

    Input

    5 28 35 7 14 21

    Output

    4

    Note

    In the first sample, if we rearrange elements of the sequence as??-?1,?2,?1, the whole sequence?ai?would be Fibonacci-ish.

    In the second sample, the optimal way to rearrange elements is?,?,?,?,?28.

    題目大意:

    ? ? ?定義,fib數(shù)列:f[0]、f[1]任意,對于n > 1,f[n] = f[n-1] + f[n-2]。給定n個元素,構(gòu)造最長的fib數(shù)列,輸出長度。

    解題報告:

    ? ? ?由于斐波那契數(shù)列數(shù)值成指數(shù)型增長(稱為斐波那契數(shù)列的收斂性),所以實際可選的長度不會超過100(實際上增長速度僅僅比2的冪次方要慢一點點。若是正整數(shù)的斐波那契數(shù)列,要從0 1增長到1e9只需40位左右,所以題中樣例給出的長度最大也是接近90的)。那么只需離散出全部的不同的數(shù)值及其個數(shù),枚舉前兩位即可。有個特例,如果前兩位為0,這時可以造一個樣例長度可能達到1000,但只會出現(xiàn)一次。。。所以無傷大雅。(好像cf里沒有這個樣例)

    ? ? 時間復雜度o(100 * n^2logn)左右。

    TLE3代碼:

    #include<bits/stdc++.h> #define ll long long using namespace std; ll a[2005]; int n; ll max(ll x,ll y) {if(x > y) return x;return y; } ll solve(int p1,int p2) {ll res = 2,tmp = 0;int pos = 1;ll r[3] = {a[p1],a[p2]};while(1) {if(binary_search(a+1,a+n+1,r[0] + r[1]) == 0) break;res++;r[2] = r[0]+r[1];r[0]=r[1]; r[1]=r[2];} return res; } int main() {ll maxx = 0;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i);sort(a+1,a+n+1);for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {if(j == i) continue;maxx = max(maxx,solve(i,j));}}printf("%lld\n",maxx);return 0 ;}

    究其原因,,貌似是因為沒有離散化?但是貌似離散化也離散不了哪里去吧,也就是可以下標存下這個元素了,但是查找的時候還是log的復雜度啊。。

    ?

    AC代碼:(700ms左右)

    離散化后用map存出現(xiàn)次數(shù),但是其實因為都離散化了,就不需要map了啊(因為下標已經(jīng)是<1000的了),所以直接二分找位置然后開num數(shù)組存離散化后值出現(xiàn)的次數(shù)就好了呀。

    #include<bits/stdc++.h> #define ll long long using namespace std; ll a[2005]; int n,len; map<ll,ll> mp; ll max(ll x,ll y) {if(x > y) return x;return y; } ll solve(int p1,int p2) {ll res = 2,tmp = 0;int pos = 1;ll r[3] = {a[p1],a[p2]};mp[r[0]]--;mp[r[1]]--;while(1) {if(mp[r[0]+r[1]] == 0) break;res++;r[2] = r[0]+r[1];r[0]=r[1]; r[1]=r[2];mp[r[1]]--;//mp[r[0]]--;} mp[r[1]]++;mp[r[0]]++;while(1) {if(r[0] == a[p1] && r[1] == a[p2]) break;r[2] = r[1]-r[0];r[1] = r[0];r[0] = r[2];mp[r[0]]++;}return res; }int main() {ll maxx = 0;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i),mp[a[i]]++;sort(a+1,a+n+1);len = unique(a+1,a+n+1) - a - 1;for(int i = 1; i<=len; i++) {for(int j = 1; j<=len; j++) {if(j == i && mp[a[i]] <= 1) continue;maxx = max(maxx,solve(i,j));}}printf("%lld\n",maxx);return 0 ;}

    另:這題solve函數(shù)中完全沒有必要兩邊while,其實一遍就可以,順便記錄下用到了哪些值,最后直接遍歷這些值然后num[]++不就好了。

    AC代碼2:(網(wǎng)上大部分都是給的遞歸的形式,但是有什么卵用呢、、)

    #include<bits/stdc++.h> #define ll long long using namespace std; ll a[2005]; int n,len; map<ll,ll> mp; ll max(ll x,ll y) {if(x > y) return x;return y; } int f(ll a,ll b) {ll ans=0;if(mp[a+b]) {mp[a+b]--;ans=f(b,a+b)+1;mp[a+b]++;}return ans; }int main() {ll maxx = 0;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i),mp[a[i]]++;sort(a+1,a+n+1);len = unique(a+1,a+n+1) - a - 1;for(int i = 1; i<=len; i++) {for(int j = 1; j<=len; j++) {if(j == i && mp[a[i]] <= 1) continue;mp[a[i]]--;mp[a[j]]--;maxx = max(maxx,f(a[i],a[j]));mp[a[i]]++;mp[a[j]]++;}}printf("%lld\n",maxx+2);return 0 ;}

    ?

    附一個網(wǎng)絡(luò)AC代碼沒用map的:

    #include<iostream> #include<cstdio> #include<cstring> #include<string.h> #include<algorithm> #include<vector> #include<cmath> #include<stdlib.h> #include<time.h> #include<stack> #include<set> #include<map> #include<queue> using namespace std; #define rep0(i,l,r) for(int i = (l);i < (r);i++) #define rep1(i,l,r) for(int i = (l);i <= (r);i++) #define rep_0(i,r,l) for(int i = (r);i > (l);i--) #define rep_1(i,r,l) for(int i = (r);i >= (l);i--) #define MS0(a) memset(a,0,sizeof(a)) #define MS1(a) memset(a,-1,sizeof(a)) #define MSi(a) memset(a,0x3f,sizeof(a)) #define inf 0x3f3f3f3f #define lson l, m, rt << 1 #define rson m+1, r, rt << 1|1 typedef __int64 ll; void out(T a) {if(a>9) out(a/10);putchar(a%10+'0'); } int v[1010],num[1010],stk[1010];//stk長度也要為1000,因為前面兩個為0時,len可能為最大值 int main() {int n;read1(n);rep0(i,0,n) read1(v[i]);sort(v,v + n);int ans = 0,cnt = 0;rep0(i,0,n){int t = i;while(i < n - 1 && v[i] == v[i + 1]) i++;num[cnt] = i - t + 1;v[cnt++] = v[i];//壓縮}v[cnt] = 2e9;rep0(i,0,cnt){rep0(j,0,cnt){if(i != j || num[j] > 1){stk[1] = i;stk[2] = j;int len = 2,val = v[i] + v[j];num[i]--,num[j]--;int down = lower_bound(v,v+cnt,val) - v;while(v[down] == val && num[down]){num[down]--;val -= v[stk[len-1]];val += v[down];stk[++len] = down;down = lower_bound(v,v+cnt,val) - v;}ans = max(ans,len);rep1(i,1,len) num[stk[i]]++;}}}out(ans);return 0; }

    ?

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的【CodeForces - 633D】Fibonacci-ish (离散化,暴力枚举+STPmap,fib数列收敛性质)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 免费激情av | 色男人的天堂 | 中日韩免费视频 | 亚洲第一页乱 | 中文字幕视频一区 | av电影免费在线播放 | 三级在线网站 | 欧美色噜噜 | 欧美日韩乱 | 欧美人与性动交α欧美精品 | 免费av观看网址 | 免费在线小视频 | 最新国产网站 | 午夜激情视频在线 | 国产精品人人妻人人爽 | 性一交一乱一乱一视频 | av中文字幕一区二区 | 久久久高潮 | 日韩二区三区四区 | 青青草视频免费播放 | 国产日韩视频一区 | 日韩国产网站 | 深夜福利亚洲 | 六月丁香啪啪 | 国产黄色免费视频 | 免费视频日韩 | 欧美一级一级 | 久久精品午夜福利 | 亚洲午夜视频在线观看 | 色综合天天操 | 国产淫片av片久久久久久 | 色夜av | 亚洲图片综合区 | 色播五月激情五月 | 中文字幕永久在线 | 精品国产一区二区三区四区阿崩 | 国产激情a| 贝利弗山的秘密1985版免费观看 | 男女被到爽流尿 | 国产精品免费一区二区区 | 色偷偷888欧美精品久久久 | 国产91精品久久久久久久网曝门 | 欧美视频色 | yes4444视频在线观看 | 午夜影院免费观看 | 变态另类一区 | 国产熟妇搡bbbb搡bbbb | 午夜免费高清视频 | 欧美成人精品 | 国产日本欧美一区二区 | 五月天中文字幕mv在线 | 永久福利视频 | 天堂一区二区三区 | 色丁香六月 | 中文字幕91爱爱 | 国产第一页屁屁影院 | 成年人视频网 | 熟女肥臀白浆大屁股一区二区 | 性xxxx| 亚洲男人在线 | 有码在线 | 国产 丝袜 欧美中文 另类 | 涩涩成人网| 久久特黄视频 | 欧美片一区二区三区 | 五月精品 | 三级不卡视频 | 色亚洲欧美| 国产好片无限资源 | 性视频免费看 | 日本道在线观看 | 午夜久久网 | 男女性网站 | 拍真实国产伦偷精品 | 亚洲性xxxx| 99热最新 | 日本草草影院 | 一区二区 中文字幕 | 欧美大片黄 | 久久久久无码精品国产sm果冻 | 亚洲激情一区二区 | 国产永久免费视频 | 懂色av一区二区三区免费 | wwwyoujizz日本| 黄色免费在线网站 | 欧美日本在线看 | 一道本一区二区 | 亚洲av无码一区二区乱子伦as | 欧美视频xxxx| 欧美在线性 | 人妻熟女aⅴ一区二区三区汇编 | 在线a视频 | 操操插插 | 国产精品中文 | 污网在线看 | 美女扣逼喷水视频 | 91看片就是不一样 | 青苹果av| 饥渴少妇勾引水电工av |