95 条题解
-
0notblack LV 10 @ 2009-09-02 22:09:59
这题真是卡时间又卡空间....
时间上因为
F[N]=F[N div 2]+F[N div 2 -1]+...+F[1]
当你很兴奋地想要开3000000的数组,和N^2的算法。那你还是去睡觉吧。我们必须找到一些优化。
当N=2*i+1时,F[N]=F[N-1].
当N=2*i时,F[N]=F[N-1]+F[N div 2].
这样就达到O(n)的时间。而且当N=2*i+1时,F[N]=F[N-1]. 也就是数组里一半的数是相同的,所以我们只要开1500000的数组就可以了,不然MLE等着你。
最好加上压位高精,不加能不能过我也没试。
另外不要兴奋过度,因为有多组数据,否则就是“格式错误”等你啦。
其实几组数据都无所谓,我们一不做二不休全部算出来,然后读表就可以了。核心代码就这么短,再写个高精加法就AC了!
f[0][0]:=1; f[0][1]:=1;
for i:=1 to maxn do add(f,f[i shr 1],f[i]); -
02009-08-27 23:43:15@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 9ms
├ 测试数据 03:答案正确... 9ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:18ms啊,AC 啦!
天啊,地啊~~~~~~~~总结一下(楼下大牛们的题解):
1. 高精不用说了,压9位,数组开1500000*7
2. 因为2*k与2*k+1的值相同(自己先算出前几个的值,就可以找到规律)
f[0]:=1;
f[i]:=f+f[i shr 1];
这里的i代表偶数,输出时只要输出n shr 1,推的时候只推偶数值,具体看程序程序:
const maxn=1500001;
th=1000000000;
type arr=array[0..7] of longint;
var
f:array[0..maxn] of arr;
n,i,max:longint;procedure add(var s:arr;a,b:arr); //高精加
var i,sum,t:longint;
begin
i:=1;
t:=0;
while (i -
02009-08-25 20:14:47@
-
02009-08-21 21:28:13@
为什么不压9位呢? 那样不就15000000*6了吗?
-
02009-08-20 16:37:34@
编译通过...
├ 测试数据 01:答案正确... 88ms
├ 测试数据 02:答案正确... 72ms
├ 测试数据 03:答案正确... 72ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:232ms第300个通过`
\
` -
02009-08-20 14:02:45@
庆祝一下!AC第100题!
编译通过...
├ 测试数据 01:答案正确... 41ms
├ 测试数据 02:答案正确... 119ms
├ 测试数据 03:答案正确... 119ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:279ms -
02009-08-16 19:02:26@
我X...
压8位...存一半...不然内存溢出...
难怪通过率那么低...
f[i]=f+f[i div 2] -
02009-08-15 23:15:03@
编译通过...
├ 测试数据 01:答案正确... 119ms
├ 测试数据 02:答案正确... 119ms
├ 测试数据 03:答案正确... 134ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:372ms没什么好说的,感谢先人的指点!
终于领略了此题的精髓...
可是还是刷了好多次...嗯...那个,下次咱也信春哥...
-
02009-08-11 20:24:25@
编译通过...
├ 测试数据 01:答案正确... 306ms
├ 测试数据 02:答案正确... 228ms
├ 测试数据 03:答案正确... 228ms
由于种种原因,本人叫了十次,前面的都是10分,悲剧啊。
在最后一次的时候,我在最后“end.”前加了“{信春哥,刷水题}”结果就ac了。现在我才知道春哥是多么的..膜拜 -
02009-08-11 19:40:57@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 56ms
├ 测试数据 03:答案正确... 56ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:112ms
交了八次,最后一次终于过了,唉。。。。。。 -
02009-08-10 16:00:39@
终于过了…………这时候才发现我头发都白了。。。
。。N组数据~前面算过就不用算了。。。居然才想到。。Vag 6K~好东西阿~ -
02009-08-07 15:00:31@
Orz
此题害人不浅啊!
注意:
1.每个点有多组测试数据
2.空间有限制 -
02009-08-06 12:43:41@
编译通过...
├ 测试数据 01:答案正确... 150ms
├ 测试数据 02:答案正确... 25ms
├ 测试数据 03:答案正确... 150ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:325ms第一次 开了个3000000*50的数组交上去 运行超时
然后再次提交 还是不行....第二次 想了想 其实我还是做麻烦了f[i]:=1+f[i div 2]+f[i div 2-1]+..f[1]
其实可以改成f[i]:=f
if i是偶数 then f[i]:=f[i]+f[i div 2]
提交 还是错了...第三次
后来看了看楼下们的题解
因为第2*i个与2*i+1个是相等的 数组可以压缩一半
又发现要高精压9位(偶滴神啊!!!!)
就这样把数组压到 1500000*7总算过了 呼呼(~ o ~)~zZ
-
02009-08-03 21:40:55@
此题看来不能交打表程序,一个裸的case要83.4MB。
预处理然后直接输出吧。 -
02009-07-30 18:57:17@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 72ms
├ 测试数据 03:答案正确... 56ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:128ms⊙﹏⊙b汗
真不容易~
由于2i和2i+1答案一样 所以只记录1500000个
防止内存溢出 -
02009-07-25 08:52:44@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 119ms
├ 测试数据 03:答案正确... 103ms
这是dragon...
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 41ms
这是puppy....靠...活活被急死...
-
02009-07-23 16:04:12@
一定要在读入之前把表都打出来,那样可以省略每次计算当中重复的部分,不会超时。
-
02009-05-29 11:24:37@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 41ms
├ 测试数据 03:答案正确... 25ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:66msorz..第一次完全没看见“包含多个数据”这几个字……
果然加强的就是不一样……
-
02009-05-06 20:46:47@
Type
arraytype=array[1..20] of longint;
就过1个点
改成
Type
arraytype=array[1..8] of longint;
就AC了
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 41ms
├ 测试数据 03:答案正确... 88ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:129ms -
02009-04-05 10:31:13@
编译通过...
├ 测试数据 01:运行超时|格式错误...
├ 测试数据 02:运行时错误...| 错误号: 207 | 无效浮点运算
├ 测试数据 03:运行超时|格式错误...
我无语..........