51nod算法马拉松19总结

第一次打算法马拉松,感觉各位都好劲啊!!!
比赛开始两个多小时之后有人AK什么的想都不敢想啊!!!
题目链接
A:
这种题一般人都会想到拆位吧。。。
不过乘起来什么的还是挺恶心的
于是就只能N log^2 N了,拆or的位,找到一个区间与当前枚举的右端点的or值都为1,然后把这个区间中和右端点的and值和对答案贡献。
不过跑的有点慢,卡卡常就碾过去了。。。

B:
玄学复杂度题,一开始想到正解太方不敢打。
然后某位大爷告诉我说,10^6的n log n是可以过的呀2333
这个故事告诉我们,做人还是要有梦♂想的好。。。
枚举每个数是否可能在答案中。如果可能,那么它所有存在集合中的倍数的gcd就等于它自己。
直接判断就好了。
似乎gcd是log的,那么不是n log^2 n吗,能过真是太劲了

C:
对于这种伪装成难题的简单题我也是没有什么好说的。
A xor B就是求两个集合中只出现一次的数。
显然P和P xor A,Q和Q xor B一一对应,我们只需要求P xor Q=A xor B的个数。
既然这样,那么 A中所独有的集合一定存在于P中,B中所独有的也一定存在于Q中。
剩下A,B共有的,只需要P和Q都共有就可以了。
由于有C个,所以答案就是2^C,真是吓死我了。。。

D:
设n<=m,考虑枚举n中的每一个数对答案贡献。
显然这东西是有循环节的。比如,n=4,m=6时,1对应的是m中的1,5,3,1,5,3……
但是,直接求出来会超时,我们考虑只保留本质不同的。还是那个例子,5对应的是5,3,1,5,3,1….
因为有许多循环节是循环同构的。
易得本质不同的只有gcd(n,m)种(好像没什么用,暴力就好了)
对于每一种循环节求一遍前缀和,然后就可以了。
复杂度O(n)。
然而这道题有毒!!!我读入没写读入优化超时了!!!
51nod你还我150分!!!

E:
暂时不会,似乎卡精度卡的让人抓狂

F:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值