近段时间的听讲尽管努力,却很难以消化,代码也是在半晕半醒的状态下蒙着码出来的QAQ。
emmmmmmmm…………
个人感觉今天的题………………好难啊————!可能是我太菜了吧……
第一道题是个彻彻底底的水题没什么好说的。
第二题的题目虽然是gcd,但是数量太多,组合数太多,如果用正常的暴力gcd做,超时准准的。所以要提取因数,并做好标记,这样时间复杂度只有了O(n/2+n/3+n/4+n/5……),这样就准不会超时了。
题目:
有两个数组A,B,大小均为N。请在A中选择一个数x,B中选择一个数y,使得gcd(x,y)最大;如果有多组数gcd相同,找出x+y最大的。
所以超时的做法不取,我们做题目不能按老是按惯性思维做。
第三题的“买买买”,emmmmmmm……似乎是道状压DP题,然而有瓜皮大佬,开了32个十万大的数组,把所有的组合种类全部列举出来了,同时这题还可以用二分答案枚举(这个我真没想到)。
题目:
蓝月商场有
n
件宝贝,每件宝贝有两个属性:价钱
price
和品牌
brand
。其中
brand
是
1-5
之间某个整数。
每件宝贝价钱两两不同。
贪玩蓝月有Q个代言人,每个代言人拍完戏之后,希望能从蓝月商场免费顺走一样宝贝。但是每个代言人有自己的喜好,例如古天乐只喜欢品牌1,陈小春喜欢品牌1或品牌2,渣渣辉喜欢品牌3和5……具体来说,代言人会有d个喜欢的品牌(1 <= d <= 5),同时他最喜欢这些品牌中,价钱第k便宜的宝贝。
请你求出每个代言人最喜欢的宝贝的价钱是多少!如果不存在这件宝贝,请输出-1.
第四题,对最长公共子序列中,子序列这个不清楚,如果字符串s中,删除其中某几个字符形成的字符串就能算作s的子序列,我当时把它当作连续的字符串,于是怎么也得不到正确的答案。听有些大佬们先将每两个的字符之间的代价给求出,在进行DP,最后可以用f[i][j][p]表示a串种前i个和b串中前j个,p代表最少长度,整个f表示代价,dp做出来后,f[n][m][k]就是所求。甚至还有些大佬把这个方程压缩成了2维。(太强了)
题目:
有两个仅包含小写字母的字符串
x,y
,长度分别为
n,m
。你需要修改
x
串中某些字符,是的新的
x
串和
y
串的最长公共子序列长度至少为
k
。
我们将’a’…’z’对应成0…25,修改两个字符付出的代价,为它们对应的数的xor值。比如说,将’a’修改成’z’代价为0 xor 25=25。
请问最少付出多少代价,使得新的x串和y串的LCS大于等于k。
第五题,阶乘数组,其实当时第一眼就觉得是线段树,但是,还没练过多少,很烦,不知从何下手,只敲过一个模板。emmmmmmm,虽然敲出来了,但还是把树种死了。但其实这道题有个很强大的优化,打表方法找得出:经过40个阶乘后,由于取模,则阶乘会重新归为0。所以我们只要修改四十以内的区间,单点累加就好了。
O((
n+q
)*50 log n)这样的效率贼快。
题目:
给出长度为n的序列A1,A2,…,An。进行m次操作,有三种类型:
给出l,r,将区间[l,r]的Ai都加一。
给出l,r,询问区间[l,r]的Ai!的和,对10^9取模。
给出I,v,将Ai单点修改为v。
第六题按位运算对其求和,其实每一位的操作相对独立,所以我们只要拆除每位1,然后增加答案fi*(2^(i-1)),之后我们还可以得出询问中的y按位拆分完之后,x & 2^(i-1) 的结果都随x循环而重复出现,即:2^(i-1)个0与同数量的2^(i-1)交替出现。确实没有想到啊!傻乎乎的竟然用树状数组码了半天…………