题意:1000个元素,每个元素的大小-1e9<=a[i]<=1e9,然后让你重新安排这些元素的位置

获得最长的前缀斐波那契数列

分析:枚举第一个元素和第二个元素,因为在题目元素的范围内,最多形成长度为90的斐波那契数列

除非有全0的情况出现,这种情况会达到长度1000

所以这种情况特判一下(记录一下零元素的个数就行了)

然后枚举是n^2的

找元素是90,然后找的时候,我用的map来找

所以时间复杂度是略大是O(90n^2logn)

所以由于不可能每次都找到90,所以均摊比较小,这题时限是3s,我跑了2012ms

主要是我太弱(这是刚比完赛看题解写的)

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
typedef long long LL;
const int N=+;
map<LL,int>mp;
LL a[];
int main()
{
int n;
LL res=,mx=-;
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%I64d",&a[i]);
mx=max(a[i],mx);
if(a[i]==)++res;
mp[a[i]]++;
}
LL ans=;
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j)
{
if(j==i)continue;
if(a[i]==&&a[j]==)continue;
LL x=a[i],y=a[j],cnt=;
vector<LL>t;
t.clear();
t.push_back(x);
t.push_back(y);
mp[x]--;
mp[y]--;
while(x+y<=mx&&mp[x+y]>)
{
LL tmp=x+y;
mp[tmp]--;
t.push_back(tmp);
x=y;
y=tmp;
++cnt;
}
for(int k=;k<t.size();k++)
mp[t[k]]++;
ans=max(ans,cnt);
}
}
printf("%I64d\n",max(ans,res));
return ;
}

然后后来我又写了一份,之所以用MAP找,是因为元素范围大

所以可以用排序hash,用lower_bound来找,这样复杂度其实和上面的复杂度原理上和上面一样

但是由于用数组实现,所肯定比STL要快,写成这样才跑了826ms

所以说能不用STL,还是不用吧

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
typedef long long LL;
const int N=+;
int a[],b[],sum[],pos[];
int main()
{
int res=,mx=-,n,l=;
scanf("%d",&n);
for(int i=; i<=n; ++i)
{
scanf("%d",&a[i]);
mx=max(a[i],mx);
if(a[i]==)++res;
}
sort(a+,a++n);
b[++l]=a[];
for(int i=; i<=n; ++i)
if(a[i]!=a[i-])b[++l]=a[i];
for(int i=; i<=n; ++i)
{
pos[i]=lower_bound(b+,b++l,a[i])-b;
++sum[pos[i]];
}
int ans=;
for(int i=; i<=n; ++i)
{
for(int j=; j<=n; ++j)
{
if(j==i)continue;
if(a[i]==&&a[j]==)continue;
int x=a[i],y=a[j],cnt=;
vector<int>t;
t.clear();
sum[pos[i]]--;
sum[pos[j]]--;
t.push_back(pos[i]);
t.push_back(pos[j]);
while(x+y<=mx)
{
int z=lower_bound(b+,b++l,x+y)-b;
if(z==l+||b[z]!=x+y||!sum[z])break;
sum[z]--;
t.push_back(z);
int tmp=x+y;
x=y;
y=tmp;
++cnt;
}
for(int k=; k<t.size(); k++)
sum[t[k]]++;
ans=max(ans,cnt);
}
}
printf("%d\n",max(ans,res));
return ;
}

Codeforces 633D Fibonacci-ish 暴力的更多相关文章

  1. codeforces 633D D. Fibonacci-ish(dfs+暴力+map)

    D. Fibonacci-ish time limit per test 3 seconds memory limit per test 512 megabytes input standard in ...

  2. codeforces 724B Batch Sort(暴力-列交换一次每行交换一次)

    题目链接:http://codeforces.com/problemset/problem/724/B 题目大意: 给出N*M矩阵,对于该矩阵有两种操作: (保证,每行输入的数是 1-m 之间的数且不 ...

  3. codeforces 897A Scarborough Fair 暴力签到

    codeforces 897A Scarborough Fair 题目链接: http://codeforces.com/problemset/problem/897/A 思路: 暴力大法好 代码: ...

  4. Codeforces A. Playlist(暴力剪枝)

    题目描述: Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  5. [codeforces 200 A Cinema]暴力,优化

    题意大致是这样的:有一个有n行.每行m个格子的矩形,每次往指定格子里填石子,如果指定格子里已经填过了,则找到与其曼哈顿距离最小的格子,然后填进去,有多个的时候依次按x.y从小到大排序然后取最小的.输出 ...

  6. Codeforces 193E - Fibonacci Number(打表找规律+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 蠢蠢的我竟然第一眼想套通项公式?然鹅显然 \(5\) 在 \(\bmod 10^{13}\) 意义下并没有二次剩余--我真是活回去了... ...

  7. Codeforces 633D

    题意: 给定n,和一个长度为n的序列. 让你在这n个数中找长度尽可能长的fib数列. 思路: 这题的数字是在1e9范围内的,所以最长的可能存在的fib数列官方的解释是90左右.有一种情况除外,就是0的 ...

  8. Codeforces Gym 100531D Digits 暴力

    Problem D. Digits 题目连接: http://codeforces.com/gym/100531/attachments Description Little Petya likes ...

  9. CodeForces 589B Layer Cake (暴力)

    题意:给定 n 个矩形是a*b的,问你把每一块都分成一样的,然后全放一块,高度都是1,体积最大是多少. 析:这个题,当时并没有完全读懂题意,而且也不怎么会做,没想到就是一个暴力,先排序,先从大的开始选 ...

随机推荐

  1. eclipse *.vm 文件,语法高亮

    eclipse *.vm 文件,语法高亮按如下方式不起作用,原因不明.设置文件打开时使用的编辑器General>>Editors>>File Associations 下述方试 ...

  2. 用于软件包管理的21个Linux YUM命令

    FROM:http://os.51cto.com/art/201309/411895.htm YUM(Yellowdog Updater Modified)是一款开源命令行及图形化软件包管理工具,面向 ...

  3. Code for the Homework1

    作业要求: http://www.cnblogs.com/bingc/p/4919692.html 代码(未使用Eigen): #include <iostream> #include & ...

  4. 企业应用的Web程序的安全性

    提起安全性这个话题,大家恐怕依稀还记得Sony的PSP账户信息泄露的事故造成的重大损失.但是又隐隐觉得这事儿离我很远,无需过多考虑.也有的人会想,我们做的是企业内部系统所以不必太在意.但是,Web程序 ...

  5. 【数位DP】Hdu 2089:不要62

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. C#取中间文本

    /// <summary> /// 取中间文本 + static string GetMiddleStr(string oldStr,string preStr,string nextSt ...

  7. Ehcache详细解读(转载)

    Ehcache 是现在最流行的纯Java开源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面 ...

  8. oracle SQLserver 函数

    1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value ...

  9. 极客范:如何使用 Cloud Insight 来监控闭路电视?

    最近新上线支持 Windows 系统及其组件 监控功能的 Cloud Insight,在系统监控领域基本囊括了对所有主流和部分非主流平台的支持.但是这还不够,Cloud Insight 可不仅仅是一个 ...

  10. Flask, Tornado, GEvent, 以及它们的结合的性能比较

    Flask, Tornado, GEvent, 以及它们的结合的性能比较 英文: http://blog.wensheng.com/2011/10/performance-of-flask-torna ...