[OI笔记]杂题整理1(基础篇~)

  • 算是开学第四周啦,之前的三周大概过了一遍基础图论和数学相关的内容。这篇随笔打算口胡一些近期做感觉比较好的数学相关的题目
  • 因为这段时间主要是看紫书学的,所以其实会有些出自UVA的例题,如果需要题目但是觉得网页慢的话OI in hand这个网站也许会有帮助w
  • 如果打算自己做一遍还是不要看题解的比较好
  • _(:з」∠)_可能会比较偏向于记笔记的口胡形式…?
  • 不定期更新…

17.9.18



GCD XOR(UVA12716)

题意:给你一个n(1<=n<=3107)问有多少对整数(a,b)满足1<=b<=a<=ngcd(a,b)=axorb


题解:注意到如果有axorb=c那么可以推出axorc=b(我也不会很妙的证明…直接考虑某一个二进制位的所有4种情况吧…(其实由于交换律应该是三种?))
那我们干脆枚举ac,因为c肯定是a的约数,所以可以枚举所有c然后枚举c的倍数a(一共是O(nlogn)个)这样只要检验所有的二元组(a,c)是否有gcd(a,b)=gcd(a,axorc)=c就行啦,时间复杂度O(nlog2n)

实际上还可以更优:其实有ab=c的…这里说下我自己的想法:首先如果把ab写成二进制形式很容易看出有ab<=axorb=c,因为c=gcd(a,b)=gcd(b,ab)<=ab于是又得到了c<=ab,然后就得到ab=c啦。
然后根据这一点就可以直接得出gcd(a,b)=gcd(a,ac)=c,于是连gcd都省了复杂度就又少掉一个log啦~

顺便这题询问挺多的可以先预处理出答案


Coupons(UVA10288)

口胡题意:卡池有n种卡,可以认为每种卡有无限张,每次抽一张,问集齐所有n种卡的期望次数


口胡题解:考虑一个简化版本:如果我已经抽到k种卡了,那么抽到一张新卡的概率是多少?nkn,很显然吧x=nkn,抽一次没抽到的概率就是(1x)了,抽p次没抽到的概率是(1x)p,也很显然吧
然后现在来考虑下抽到新卡的期望次数,首先肯定要抽一次,如果没抽到就再抽,脸黑的话可能要一直抽下去…然后期望次数就是i=0(1x)i,怎么算下去呢?注意到这个和式其实是一个无限的等比数列求和,如果是有限的话呢?比如如果我们求的是i=0m(1x)i的话答案就是1(1x)m+11(1x)了,注意(1x)<1,于是当m+(1x)m+10,然后答案其实就是1x=nnk啦…
于是要抽到所有卡的期望就是k=0n1nnk=nk=0n11nk=nk=1n1k啦~w




17.10.9



HEOI2016排序(bzoj4552)

题意:给出1n的一个全排列,m次操作每次对一段区间升序或降序排序,最后询问一个位置的数字(n,m<=105


qwq之前在浴谷秋令营上听了noip老师讲的这题,感觉做法很妙啊~
口胡题解:对每次操作排一次序,最后查位置,时间复杂度O(nmlogn)!~
上面一行划掉x
注意到给出的是一个1n的全排列,以及这题只要在最后询问一个位置的信息,也就是说这里没有必要把每个位置具体的信息都求出来
我们可以考虑二分这个位置的答案,问题就转换到如何快速check一个ans
我们肯定不能去直接排序这个东西,考虑维护每个位置的数字跟ans的关系,如果小于我们要checkans就标记为0,否则就标为1~
这样每次排序操作要做的就是统计一下区间里有多少个1,然后根据情况进行区间赋值~
很显然上面这这种操作可以用线段树完成,于是时间复杂度就降到了O(nlog2n)~(因为n,m范围一样就直接这样写了233)

(听说这个题还可以滋兹多次查询O(nlogn)的做…orz)


如果有错还请尽情怼我呀x

posted @   yoshinow2001  阅读(630)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示