随笔分类 -  数论

摘要:地址 https://www.51nod.com/live/liveDescription.html#!liveId=23 1187 寻找分数 给出 a,b,c,d, 找一个分数p/q,使得a/b < p/q < c/d,并且q最小。例如:1/3同1/2之间,符合条件且分母最小的分数是2/5。(如果 阅读全文
posted @ 2018-10-22 19:25 Sugewud 阅读(466) 评论(0) 推荐(0)
摘要:这道题正好复习了二项式定理所以答案就是a^n * b^m * c(n, k)然后注意一些细节我一开始写组合数只写一行的组合数即c[0] = 1; c[i] = c[i-1] * (n - i + 1) / i但是因为要去模,同时式子里面有除法,所以不能用这种方式必须从... 阅读全文
posted @ 2018-09-22 14:19 Sugewud 阅读(143) 评论(0) 推荐(0)
摘要:一开始只保留最后一位,交上去29#include#include#include#define REP(i, a, b) for(int i = (a); i #include#include#define REP(i, a, b) for(int i = (a); ... 阅读全文
posted @ 2018-09-22 10:26 Sugewud 阅读(133) 评论(0) 推荐(0)
摘要:这道题其实不难,但是我想复杂了我想的是把每个数质因数分解,然后每次就枚举每个质因数来求最小公倍数。然后想了想这样复杂度将会非常的大,肯定超时然后看了题解发现不需要质因数分解,直接存因数的个数就好了c[i]表示i这个因数出现的次数。然后因为当k越小的时候答案越大(严格来... 阅读全文
posted @ 2018-09-22 09:52 Sugewud 阅读(153) 评论(0) 推荐(0)
摘要:这道题直接写了我两个多小时……主要是写高精度的时候还存在着一些小毛病,调了很久在输入这一块卡了很久。然后注意这里用while的形式写,不然会炸最后即使我已经是用的万进制了,但是交上去还是有两个点超时然后就开始漫长的改进,一直过不了那两个点。然后突然发现,貌似这道题没有... 阅读全文
posted @ 2018-09-21 23:32 Sugewud 阅读(177) 评论(0) 推荐(0)
摘要:这道题实际上是考二进制很容易看出杯子水量一定是2的i次方所以n杯水最后剩下的水一定是n用二进制表示中1的个数所以就枚举n来求什么时候1的个数小于k那么这里有个优化,不然会超时因为每次加的目的是要让1的个数变少,也就是要进位所以每次加上的是lowbit(n)#inclu... 阅读全文
posted @ 2018-09-20 18:52 Sugewud 阅读(164) 评论(0) 推荐(0)
摘要:这道题需要对排列有深刻的理解和认识给出逆序对的个数,求改逆序对个数的字典序最小的排列那么既然是最小,那么一开始一段肯定是升序,一直到某个数后才开始改变即1 2 3…… n-1 n a b c d……类似这样那么我们要求出这个n在哪里要字典序最小,就需要1到n这一段最长... 阅读全文
posted @ 2018-09-18 18:35 Sugewud 阅读(202) 评论(0) 推荐(0)
摘要:设答案为d则这k个数是d, 2d, 3d, 4d……kd有 kd #define REP(i, a, b) for(int i = (a); i < (b); i++)#define _for(i, a, b) for(int i = (a); i <= (b); i... 阅读全文
posted @ 2018-09-18 16:51 Sugewud 阅读(115) 评论(0) 推荐(0)
摘要:水题水题#include#include#include#define _for(i, a, b) for(int i = (a); i prime;int ans[MAXN];void get_prime(){ memset(is_prime, true, ... 阅读全文
posted @ 2018-09-17 16:39 Sugewud 阅读(99) 评论(0) 推荐(0)
摘要:有两种做法一种是gcd与lcm相乘后就是两个数的乘积,枚举第一个数,算出第二数,看最大公约数是不是题目给的。第二种就lcm/gcd的答案为两个互质的数相乘。然后就枚举有多少组互质的数相乘等于lcm / gcd就ok了然后又小优化,可以只枚举到根号,然后结果乘以2就行了... 阅读全文
posted @ 2018-09-17 16:30 Sugewud 阅读(141) 评论(0) 推荐(0)
摘要:维护一个滑动窗口即可注意不能有m到m的区间,因为区间长度要大于1#include#define _for(i, a, b) for(int i = (a); i m) while(sum > m) sum -= st, st++; if(sum == m) pri... 阅读全文
posted @ 2018-09-17 16:16 Sugewud 阅读(155) 评论(0) 推荐(0)
摘要:和平常的转化差不多加多一步如果余数 #define _for(i, a, b) for(int i = (a); i <= (b); i++)using namespace std;void cal(int n, int m){ if(n == 0) return; ... 阅读全文
posted @ 2018-09-17 15:54 Sugewud 阅读(330) 评论(0) 推荐(0)
摘要:怎么会有这么水的省选题一定是个签到题。好歹它也是个省选题,独立做出要纪念一下很容易发现在1~n中,i的因子数是n / i那就枚举每一个i然后加起来就OK了#include#define _for(i, a, b) for(int i = (a); i #define ... 阅读全文
posted @ 2018-09-17 15:09 Sugewud 阅读(118) 评论(0) 推荐(0)
摘要:这道题太精彩了!我一开始想直接一波暴力算,然后叫上去只有50分,50分超时然后我改成万位制提高运算效率,还是只有50分然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进制去做,然后交上去多过了一个点,60分 附上丧心病狂的代码#include... 阅读全文
posted @ 2018-09-17 14:51 Sugewud 阅读(261) 评论(0) 推荐(0)
摘要:直接调用next_permutation即可,向前的话可以调用prev_permutation#include#include#include#define REP(i, a, b) for(int i = (a); i #include#include#define... 阅读全文
posted @ 2018-09-17 11:23 Sugewud 阅读(359) 评论(0) 推荐(0)
摘要:中国剩余定理就是同余方程组除数为质数的特殊情况我直接用同余方程组解了。记得exgcd后x要更新还有先更新b1再更新m1,顺序不能错!!(不然会影响到b1的更新)#include#include#define REP(i, a, b) for(int i = (a); ... 阅读全文
posted @ 2018-09-17 10:43 Sugewud 阅读(109) 评论(0) 推荐(0)