07 2018 档案
摘要:把k的倍数的删去(k, 2k, 3k……),但是k^2不应该删去,因为k已经删去,所以不存在某个数乘上k之后为k^2所以k^2可以留下,然后因为有k^2,所以k^3就是k^2的k倍,所以k^3要删去,但是k^4又要加回来,以此类推ans = n - n / k + n...
阅读全文
摘要:2018 NOIP目标(1)刷完紫书数论习题(2)听51nod讲座和习题,根据其知识结构来备战。(3)刷完紫书动规(4)初赛前两个星期左右开始复习 刷紫书动规的时候感觉偏难,进步缓慢。应该自己调低难度两个大任务(1)51nod讲座(2)按照《算法竞赛进阶指南》中动规的...
阅读全文
摘要:看了其他人博客,貌似i个盘子的方案数满足 f[i] = f[i-1] * x + y???????神来之笔貌似没有找到严格的证明……牛逼…… 如果这样的话暴力求出x和y然后递推完事#include#include#define REP(i, a, b) for(int...
阅读全文
摘要:我一开始以为有什么很牛逼的方法来做,然后一直没有思路后来看了https://blog.csdn.net/zju2016/article/details/78562932的博客竟然是暴搜???????????/好我服了 大致思路:素数的范围在100以内因为要求尽量小,所...
阅读全文
摘要:自己一直在纠结这个串的构造方法而没有观察串本身的规律…… 2的63次方用 unsigned long long然后可以发现串是递归构造的。将串分成1,1,2,4,8,16, 然后会发现s串里面1个s-2串,2个s-3串,3个s-4串最后加上s如第三个串1003是由1个...
阅读全文
摘要:C(n, k) = m, 固定k,枚举k这里用到了组合数的一个性质当k固定的时候,C(2 * k, k) 最小 C(m, k)最大(对于这道题而言是这样,因为大于m 就最终答案不可能为m了)所以就二分去枚举2*k到m之间了。最后注意算组合数的时候超过m可以直接返回,同...
阅读全文
摘要:设一次上去a层,一次下去b层,有x次上去,有(n-x)次下去则ax - (n-x)b >= 1x >= (nb+1) / (a+b) 如果可以整除, x = (nb+1) / (a+b)否则 x = (nb+1) / (a+b) +1算出x后再带到ax - (n-x...
阅读全文
摘要:这道题看起来很长,而实际上就是考物理可以用动能定理来算出末速度。同时注意要特判绳子比桥还长的情况。#include#include#define REP(i, a, b) for(int i = (a); i s) { double v = sqrt(2 * ...
阅读全文
摘要:这道题很巧妙,要把式子变一下phi(n) = n * (1 - 1 / p1) * (1 - 1 / p2)……(1 - 1 / pr) = n * ((p1-1) / p1) * ((p1-2) / p2) ……((pr-2) / pr) ...
阅读全文
摘要:类似于素数筛的思想去做,不然暴力会超时而且还要判重#include#include#include#define REP(i, a, b) for(int i = (a); i prime;int f[MAXN];void init(){ memset(vis, -...
阅读全文
摘要:这道题我已经推出00和1过两步变成00了,可我没有继续做下去……后来看了博客发现自己已经做了90%了……可惜了,以后不要轻易放弃。1的个数有个规律,就是每次都乘以2,因为0和1下一步都会变出1然后因为0和1个个数是一样的,所以1的变出1,0的也变出1最后1的个数就乘以...
阅读全文
摘要:大佬真的强!!https://blog.csdn.net/u014800748/article/details/45225881#include#include#define REP(i, a, b) for(int i = (a); i 0) return 0; ...
阅读全文
摘要:开始的时候一看这题感觉很难,觉得肯定有什么很快的办法不能暴力做(受了上一题10-13的影响)然后一看那个函数感觉无从下手。然后看了博客发现,原来这道题就是直接暴力……因为n的范围为10的7次方啊 ,不会超时自己以后要注意数据范围#include#include#inc...
阅读全文
摘要:首先看这道题目,我预感商数肯定是有规律的排列的,于是我打表找一下规律100 / 1 = 100100 / 2 = 50 100 / 3 = 33 100 / 4 = 25 100 / 5 = 20 100 / 6 = 16 100 / 7 = 14 100 / 8 =...
阅读全文
摘要:开始的时候我没有考虑1/2的概率,直接一波组合数,然后WA后来去看题解发现我们可以反过来想,求最后两个人不一样的情况这个时候肯定会抛到最后的所以每一种可能就是(0.5)^(n - 2),然后一共有C(n-2,n/2-1)种乘起来就ok了。但是这样会超时而且结果太大所以...
阅读全文
摘要:自己用手算一下可以发现是斐波那契数列,然后因为数字很大,用高精度以后做题的时候记得算几个数据找规律 #include#include#include#include#define REP(i, a, b) for(int i = (a); i = 10) c.d[i]...
阅读全文
摘要:除了根节点以外,有n-1个节点,然后就看n-1的因数有那些,所有因数加起来(递推)就好了。#include#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int ...
阅读全文
摘要:一个数的正约数个数等于这个数的质因数分解后每一项幂+1的积因为每个质因数的幂可以为0, 1, 2……(注意可以为0)所以就每个质因数配一个幂任意组合就可得一个正因数,根据乘法原理可得正约数个数。另外质因数分解可以不用素数筛(但可能会稍微慢一点)#include#def...
阅读全文
摘要:直观感觉对角线重合的时候面积最大然后可以根据方程和割补算出阴影部分的面积注意知道两点坐标,可以求出与原点形成的三角形的面积用叉乘,叉乘的几何意义以这两个向量为边的平行四边形的面积所以用叉乘除以2就可以(x1, y1), (x2, y2),叉乘为x1y2-y1x2#in...
阅读全文
摘要:把这个数质因数分解然后求因子个数的gcd就ok了。一些细节(1)这道题的质因数不需要存下来,每一次做完取一次gcd就ok了(2)判断奇偶用ans & 1的时候要加括号, 位运算要注意括号(3)这道题在32位带符号整数范围内,也就是说用int可以了(3)注意ans最后的...
阅读全文
摘要:注意要开long long如果int * int会炸那么久改成long long * int#include#include#include#define REP(i, a, b) for(int i = (a); i prime;void init(){ mems...
阅读全文
摘要:素数筛然后前缀和看代码#include#include#include#include#define REP(i, a, b) for(int i = (a); i prime;int a[MAXN];map f;void init(){ memset(is_pri...
阅读全文
摘要:这里就是01背包多了一维物品个数罢了记得不能重复所以有一层循环顺序要倒着来边界f[0][0] = 1#include#include#include#define REP(i, a, b) for(int i = (a); i prime;int f[MAXN][2...
阅读全文
摘要:素数筛没什么好说的#include#include#include#define REP(i, a, b) for(int i = (a); i prime;void init(){ memset(is_prime, true, sizeof(is_prime));...
阅读全文
摘要:这次是我遇见过最迷的一次我写的程序uDebug全过和ac程序对拍也过,求出来的坐标是一模一样的,最后结果输出的方式也是一样的交上去就是错的迷第一次遇到这种情况大佬在哪里#include#include#define REP(i, a, b) for(int i = (...
阅读全文
摘要:通过观察可以得图可以分成很多个上面一个,中间两个,下面三个的“模板”这个时候最上面一个知道,最下面得左右知道那么可以设下面中间为x,左边为a1, 右边为a2, a1a2已知那么可以得出最上面得一个为a1+a2+2x,那么最上面又是已知的所以就可以推出x,那么这个模板的...
阅读全文
摘要:这类求最优连续子序列的题一般是枚举右端点,然后根据题目要求更新左端点,一般是nlogn,右端点枚举是n,左端点是logn难点在于如何更新左端点用一些例子试一下可以发现每次加进一个新元素的时候前面的元素都要再取一遍gcd然后gcd同的时候i尽量大为了去重,我们需要排序,...
阅读全文
摘要:这道题是对称的所以只算“\”, 最后答案再乘以2然后每一条直线看作一个包围盒枚举包围盒的长宽有两种情况会重复(1)包围盒里面有包围盒。这个时候就是在一条直线上那么我们就gcd(x,y)>1的时候舍去因为在一条直线上只取gcd(x,y)=1这个点以后注意一条直线上去重问...
阅读全文
摘要:只看一个象限简化问题,最后答案乘4+4象限里面枚举x, 在当前这条固定的平行于y轴的直线中分成长度为x的一段段。符合题目要求的点gcd(x,y) = 1那么第一段1#include#define REP(i, a, b) for(int i = (a); i 1) ...
阅读全文
摘要:这里用到了一些数论知识首先素因子都大于M等价与M! 互质然后又因为当k与M!互质且k>M!时当且仅当k mod M! 与M!互质(欧几里得算法的原理)又因为N>=M, 所以N!为M!的倍数所以只要求1到M!中与M!互质的数的个数,在乘上N!/M!可以理解为每一块M!有...
阅读全文
摘要:可以发现余数是成一段一段的等差数列的。在商数同的时候,余数是成首项为第一个数的余数,公差为商数的等差数列。利用这个性质求解即可。#include#include#define REP(i, a, b) for(int i = (a); i 0) cnt = min(...
阅读全文
摘要:用欧拉公式V-E+F=2V是顶点数,E是边数,F是面数具体推导见https://blog.csdn.net/QWsin/article/details/53635397要用高精度#include#include#include#include#include#incl...
阅读全文
摘要:遍历一遍,遇到边界为奇数次时,格子在多边形内偶数次时,在多边形外#include#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;int main(){ char s[105]...
阅读全文
摘要:这道题的题解有几个亮点一个是每次只统计一个数字来简化思维一个是统计当前位数的时候分三个部分来更新答案具体看代码,有注释#include#include#include#define REP(i, a, b) for(int i = (a); i 0) ans += ...
阅读全文
摘要:感觉这道题的转换真的是神来之笔把木条转换成圆,只是切得次数变多一次然后只要有一根木条长度为直径就租不成其他点的概率为1/2^k 当前这个点的有k+1种可能所以答案为1 - (k+1)/2^k#include#include#define REP(i, a, b) fo...
阅读全文
摘要:分两类,当前第i题答或不答如果不回答的话最大期望奖金为2的i次方如果回答的话等于p* 下一道题的最大期望奖金那么显然我们要取最大值所以就要分类讨论我们设答对i题后的最大期望奖金为d[i] 显然临界点,也就是这两种情况相等的时候p0 = 2^i / d[i+1] 那么...
阅读全文
摘要:就是面积计算,没什么好说的。#include#include#define REP(i, a, b) for(int i = (a); i m) ans = 0; else ans = (m - s - s * log(m/s)) / m; printf("%....
阅读全文
摘要:设当前有k个,那么也就是说拿到其他图案的可能是(n-k)/n那么要拿到一个就要拿n/(n-k)次所以答案就是n(1/n + 1/(n-1) ......1/2 + 1 / 1)看起来很简单,但是实现有很多细节一开始我是写了一个分数加法的函数然后发现中间过程会溢出所以要...
阅读全文
摘要:设置最后打开的是盒子1, 另外一个盒子剩下i个那么在这之前打开了n + n - i次盒子那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i)那么反过来最后打开的是盒子2, 那么概率是C(2 * n - i, n) p ^...
阅读全文
摘要:感觉数学期望的和化学里面求元素的相对原子质量的算法是一样的就是同位素的含量乘上质量然后求和得出这道题因为等待时机是0到2*l/v均匀分配的,所以平均时间就是l/v再加上过河的l/v, 最后加上步行的时间就ok了#include#define REP(i, a, b) ...
阅读全文
摘要:从大到小安排杆子分三种情况(1)插到最左边,那么左边看到了杆子会多一个(2)插到最右边,那么右边看到了杆子会多一个(3)插到中间边,那么不影响左边和右边看到的杆子数具体看代码#include#define REP(i, a, b) for(int i = (a); i...
阅读全文
摘要:这道题有点类似动态规划,设答案为f(n)第一个人有i个人,就有c(n,i)种可能然后后面有f(n-i)种可能,所以相乘,然后枚举所有可能加起来就ok了。 #include#define REP(i, a, b) for(int i = (a); i < (b); i+...
阅读全文
摘要:首先我们按照这三个U的位置来分类,当前三个U在i,i+1, i+2。那么先看三个U前面,前面不能有三个U,因为我们不能重复计算那么就是所有的组合减去有U的情况为了叙述方便,我们设答案为f(n),没有三个U的方案数为 g(n)那么显然g(n) = 2的n次方-f(n)然...
阅读全文
摘要:以9元组来代表当前状态,每一元是每一堆剩下的牌数枚举当前状态所有可以拿掉牌的情况,然后递归下去求概率,当牌拿完的时候概率为1那么这里的实现非常的秀,用到了vector来代表9元组然后还用到了map来实现记忆化搜索#include#include#include#def...
阅读全文
摘要:这道题不能凭感觉做了。要套公式r个人买了东西叫事件E, 第i个人买东西的概率叫做事件Ei求得是P(E|Ei), 则P(E|Ei)= P(E|Ei)/ P(E)那么P(E)可以枚举求得, 用递归求排列,然后把每一种排列的概率加起来就是总的概率然后 P(E|Ei)就是要求...
阅读全文
摘要:公式很好推,表示被高中生物遗传概率计算虐过的人这个公式简直不需要动脑#includeusing namespace std;int main(){ double a, b, c; while(~scanf("%lf%lf%lf", &a, &b, &c)) { do...
阅读全文
摘要:小学数学问题记得分数比较的时候可以交叉相乘(同号)#include#include#define REP(i, a, b) for(int i = (a); i num * num) puts("SHOOT"); else if(k * n < num * num...
阅读全文
摘要:递归一遍遍历所有情况就ok了#include#include#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 10;char map[2][1...
阅读全文
摘要:这道题要找二元组(x, y) 满足1 #define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 51234;int euler[MAXN], ans[...
阅读全文
摘要:首先可以发现按照题目的算法最后得出来是一个杨辉三角如果ai的系数是m的倍数,那么i即为答案因为这个系数可能很大,而我们只需要判断倍数所以我们就把m分解质因数,然后判断每一个系数的质因数的幂是不是大于等于m的该质因数的幂然后注意第一个和最后一个可以不用判断还有原来的杨辉...
阅读全文
摘要:设gcd(a, b) = a xor b = c那么我们可以证明c=a-b那么同时c又是a的因子(c是a与b的最大公因数)所以我们可以枚举c,然后枚举c的倍数,也就是a有了a和c可以算出b为a-c然后最后验算是否a xor b = c就ok了。这里的枚举方式非常的巧妙...
阅读全文
摘要:首先分解,然后可以发现同一个因子ai不能存在于两个以上的数中因为求的是最小公倍数,如果有的话就可以约掉所以数字必然由ai的pi次方的乘积组成,那么显然,在a最小为2,而b大于2的情况下a*b>a+b所以要让和最小,就每一个ai的pi次方作为一个数就好了。另外注意lon...
阅读全文
摘要:这道题感觉非常的秀因为结果会很大,所以就质因数分解分开来算非常的巧妙!#include#include#include#include#define REP(i, a, b) for(int i = (a); i prime;int e[MAXN];void ini...
阅读全文
摘要:就是暴力枚举a, b然后和题目给的数据比较就ok了。刘汝佳这道题的讲解有点迷,书上讲有x1和a可以算出x2, 但是很明显x2 = (a * x1 +b)没有b怎么算x2?然后我就思考了很久,最后去看他的代码发现他的代码和他讲的是两回事他的代码里直接是枚举a和b,不是按...
阅读全文
摘要:(1)这道题要用到 unsigned long long, 弄了我好久这道题范围可以达到2的64次方-1, 而long long 最多到2的63次方-1, 而unsigned long long可以到2的64次方-1,所以要用这个类型,注意这个类型只有正数输入输出用p...
阅读全文