码迷,mamicode.com
首页 > 其他好文 > 详细

1003-模拟赛

时间:2019-10-03 23:44:33      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:模拟   重要   复杂度   fibonacci   去掉   line   cpp   应该   mod   

A

没什么好说的,\(f[i] = f[i - 1] + f[i - 2] - f[i - 11]\) 都没推出来,更没有想到用用矩阵乘法+KSM来求(类似Fibonacci的矩阵乘法来整),模拟暴力混\(60\)

B

每日一失智

认认真真算空间复杂度,\(10005 \times 10005\)再抹掉\(6\)\(0\),算出来\(100\)多一点

但是,

int值要乘个4啊!!!!

\(100\)\(400\)\(128M\)的空间限制我人瞬间就没了,从WA60到WA0,十分的快乐

我要是再算错空间(尤其是int不乘\(4\),LL不乘\(8\),我女装倒立洗头)

想到树状数组求逆序対,怎么求不同区间的,想了半天数字的范围是\(1~n\)是什么意思,其实就是可以用树状数组来搞(不用离散化)的意思qwq,反而把重要条件:\(∑∣l[i] ? l[i ? 1]∣ + ∑∣r[i]? r[i ? 1]∣ ≤ 7 × 10^6\)给忽略掉惹qwq

所以瞎**乱想到要离线,对问题排序再来搞,其实这么搞反而会T,首先sort就要用\(NlogN\)的时间,然后左移右移甚至不能保证\(≤ 7 × 10^6\)

正解就直接在线,每次移区间就是了

记一下移的方法(\([L,R]\)为已经算好的区间)

scanf("%d%d",&l,&r);        
while(L < l){
    ans -= getsum(a[L] - 1);//[L,R]中比a[L]小的数
    modify(a[L], -1);//将这个数从区间中去掉
    L ++;
} 
while(L > l){
    ans += getsum(a[L - 1] - 1);//[L,R]中比a[L-1]小的数
    modify(a[L - 1], 1);
    L --;
}
while(R < r){
    ans += getsum(n) - getsum(a[R + 1]);//[L,R]中比a[R+1]大的数
    modify(a[R + 1], 1);
    R ++;
} 
while(R > r){
    ans -= getsum(n) - getsum(a[R]);//[L,R]中比a[R]大的数
    modify(a[R], -1);
    R --;
} 
printf("%d\n",ans);

C

嗯,对,这是个状压

啥??然后我就不会整了啊(状态立的跟标程差了十万八千里)

然后立了状态也不知道怎么推下一步,我觉得吧我状态压缩是真的太弱了QwQ

应当做一下状压和带递归的专项练习,这俩我都不太会写

而且我也没想到可以先放下背着的人,再去背其他人

wtcl

顺带%%%把3进制做法改成2进制爆踩标程的学长

总结一波

预计得分:\(60 + 60 + 0 = 120\)

实际得分:\(60 + 0 + 0 = 0\)

AWSL

并不能称之为问心无愧的得分QwQ,A题推不出来方程+矩阵乘法不会我认了,但是B题其实我觉得我应该做出来的Orz Orz Orz,C题改错也改得十分自闭,我觉得我码力真是太弱了

1003-模拟赛

标签:模拟   重要   复杂度   fibonacci   去掉   line   cpp   应该   mod   

原文地址:https://www.cnblogs.com/qwqq/p/11621094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!