
数学-未分类
Endless_Way
这个作者很懒,什么都没留下…
展开
-
UOJ 12 [UER #1]猜数
数论推式子。由n=a∗b=g∗ln=a*b=g*l,且a,ba,b都是gg的倍数 设a=i∗g,b=j∗ga=i*g,b=j*g 则a+b=(i+j)∗ga+b=(i+j)*g由a∗b=g∗la*b=g*l 得g2∗i∗j=g∗lg^2*i*j=g*l 得j=lg∗ij=\frac{l}{g*i} 则a+b=(i+j)∗g=(i+lg∗i)∗ga+b=(i+j)*g=(i+\frac{l}原创 2016-08-30 12:16:52 · 418 阅读 · 0 评论 -
UOJ 21 [UR #1]缩进优化
枚举+整除技巧对于一个x,它的答案是∑ni=1(⌊aix⌋+aimodx)\sum_{i=1}^n (\left \lfloor \frac{a_i}{x} \right \rfloor + a_i\;mod\;x)把取模转化为乘除运算并且整理得 ∑ni=1(ai+⌊aix⌋∗(1−x))\sum_{i=1}^n (a_i+\left \lfloor \frac{a_i}{x} \right \r原创 2016-09-14 10:00:13 · 642 阅读 · 0 评论 -
BZOJ 1257 [CQOI2007]余数之和sum
推式子+整除性质式子挺好推的,最后枚举商即可如何枚举商?我们用[l,r]表示枚举到的商对应的除数所在区间。 如果快速找出区间?假设l,r是上一次做完的区间,对于左端只需要l=r+1。对于右端,只需要r=k/(k/l),因为对于一个区间[l,r],能发生整除的一定是在k/r的位置,所以可以用整除的原理搞过去。为什么这样分出来的块是sqrt(k)级别的?1~sqrt(k)中的每个数都去除k,那么这里就原创 2016-10-02 11:13:58 · 424 阅读 · 0 评论 -
BZOJ 1192 [HNOI2006]鬼谷子的钱袋
二进制。m非常大,就算是O(m)做法也会T,于是考虑一些奇技淫巧。把m表示成二进制,假设是10110,那么只需要1000,100,10,1,(10110-1000-100-10-1)五个钱袋,因为前四个钱袋可以表示1~1111的所有数目,而剩下的钱显然不会超过1111可以之间装起来。于是答案为满足2x>m2^x>m的最小x#include<cstdio>int main(){ int n原创 2016-08-24 16:20:32 · 318 阅读 · 0 评论 -
UOJ 20 [NOIP2014]解方程
取模判根题解:http://www.cnblogs.com/JSZX11556/p/4907703.html注意到 f(x) mod p = f(x%p) mod p. 所以枚举0~p-1即可我是智障 f不能只开一维 因为对于一个X f(x mod pi) mod pi在不同pi的取模之下答案不一样 做到后面的pi会覆盖前面的pi的结果 #include<cstdio>#include<原创 2016-10-08 12:25:41 · 490 阅读 · 0 评论 -
51Nod 1712 区间求和
推式子是的,努力推式子即可。记需要统计答案的区间的头尾值为v,主要思想就是分不同的v来考虑。枚举v的所有区间下的最小间隔的区间,考虑区间内的数在v的所有跨过这个区间的大区间的贡献即可。注意中间端点的答案会被统计两次,需要减掉……(刚开始没注意到这一点然后WA飞啦)#include<cstdio>#include<cstring>#define N 1000005 #define uint un原创 2017-03-11 00:38:59 · 453 阅读 · 0 评论 -
UOJ 267 [清华集训2016]魔法小程序
前缀和非常认真地观察代码之后我们会发现实际上这是一个多维前缀和问题,c就记录前缀和。考虑前缀和的逆操作,即可复原出原数组。#include<cstdio>#define R register#define N 1000005using namespace std;namespace runzhe2000THU{ typedef long long ll; inline ll原创 2017-03-06 17:13:36 · 901 阅读 · 1 评论