【学术篇】SDOI2009 SuperGCD】的更多相关文章

1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3060  Solved: 1036[Submit][Status][Discuss] Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一…
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2384  Solved: 806[Submit][Status][Discuss] Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个…
更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> #include<cstring> #include<cctype> #include<algorithm>   using namespace std;   const int maxn = 10009;   char S[maxn]; int Power[maxn]…
[BZOJ1876][SDOI2009]SuperGCD(数论,高精度) 题面 BZOJ 洛谷 题解 那些说数论只会\(gcd\)的人呢?我现在连\(gcd\)都不会,谁来教教我啊? 显然\(gcd\)除了辗转相除之外还可以辗转相减,然而辗转相减对于这题而言显然还不够优秀. 我们这样子来做. 如果当前\(a,b\)都是\(2\)的倍数,那么我们就把\(2\)直接同时除掉,直接在\(gcd\)中乘上一个\(2\).否则如果只有一个数是\(2\)的倍数,显然可以直接把这个\(2\)给除掉. 这样子可…
特别说明: 为了避免以后搬家时的麻烦, 这里的文章继续沿用csdn的风格和分类好了~ Emmmm这个题是一道高精度的模板题啊~ 既然是高精度的裸题, 那我们这些懒人当然是选择:用python啦~ 懒癌晚期 你看这不就做完了么←_← a=input() b=input() while(b): c=b b=a%b a=c print a 当然这份代码并不能在luogu上AC 应该是数据出锅了. (当然也不能算是出锅, 只是不太符合题目中说的输入格式而已...刻意卡python (当然还是有一些pyt…
传送门~ 题目大意 先分析\((x\ or\ y)-(x\ and\ y)\), 就是\(x\)和\(y\)中存在的1减去\(x\)和\(y\)中相同的1 *那不就是\(x\ xor\ y\)么←_←* 给定\(n\)个人, 确定一个排列, 使得不存在\(i+b_i\)在\(i\)之前, 并最小化\(\sum_{i=2}^{n}t_i\ xor\ t_{i-1}\). 题目分析 \(1\leqslant b_i\leqslant7\), 数据范围一眼状压... 但是具体怎么定义状态呢? 假如说(…
又是一道辣鸡卡常数题…. luogu上有些题的时限还是有毒的… 最后也只能靠O2过掉了… 不过给我原题当时的2s我随便过给你看嘛, 哪怕评测姬慢50%都没关系的.. 贴一下codevs的截图… 你看最慢的点也就1.07s…… (毕竟程序自带大常数←_← 好了不吐槽了, 我们来分析一下这道题吧… 其实我当时做的时候(好像还是做学校食堂的那次测试?)并不知道这是一道网络流… 然后就写暴力滚粗… 但据说这是一种非常常见的建图方式.. 我们还是分析题目条件. 我们在网络流里面做到的题目都是求和的, 那么…
这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \\ =\sum_{i=1}^n\sum_{j=1}^n\frac{ij}{gcd(i,j)} \\ =\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\frac{ij}k[gcd(i,j)=k] \\ =\sum…
最近做了几道非常水非常水的dp...... 之后刷的一些水dp也会写在这里...... 此篇题目难度不递增!!! Emmmm....... 1.luogu1043数字游戏 以前看过这个题几遍,没做这个题(觉得太难了)...... 就是一道环形的区间dp......本来想按常规的思路拆成2n做,但是换算坐标好麻烦, 然后一看n,m好小于是就直接强行把数组错位做了...... 设\(f[i][j]\)为前i个点分j份能得到的最大值,\(g[i][j]\)为前i个分j份能得到的最小值, 用\(mod(…
题目在这里哦, 戳一下就可以了~ 题目大意: 支持两种操作,区间添加一种新元素,查询区间颜色种数.. 题目标签是线段树啊,我也本来想写一个线段树,后来写不出来……(我太弱了orz) 然后就草率地看了看题解里面的思路咯,感觉思路非常的不错,于是我就A掉这题之后写了这篇blog… 我们通过这幅图可以看到: - 我们直接统计区间的覆盖不是很好统计, 考虑前缀 - 当前我们已经进行了10次覆盖 - 从[1,R]这个区间中有9个覆盖 - 但是其中有3个覆盖完全在L的左侧(即右端点在[1,L-1]) - 所…
这是一道来自OIerBBS的题目.. 原帖地址:http://www.oierbbs.com/forum.php?mod=viewthread&tid=512?fromuid=71 (似乎是个很小众的BBS..不从洛谷空降根本到不了..) (原帖的排版我忍不了.. 把题目的样式重新处理了一遍..) 题目描述 味味最近对树很感兴趣,什么是树呢?树就是有n个节点和n-1条边形成的无环连通无向图. 味味在研究过程中想知道,对于一个无根树,当节点i作为根的时候树的高是多少.所谓树高指的是从根节点出发,到…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1876 分析: 以为辗转相减会TLE呢……但是好像没这个数据……就这么水过去了…… 辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gcd(a,b)=2*gcd(a/2,b/2) 3.若a,b都是奇数:gcd(a,b)=gcd(a-b,b)…
更相减损数. 上手就debug了3个小时,直接给我看哭了. 3个函数都写错了是什么感受? 乘2函数要从前往后乘,这样后面的数乘2进位以后不会干扰前面的数. 除2函数要从后往前除,这样前面的数借来的位不会除2次. 然后函数里面俩个类里面的变量名不要打混. 哭瞎 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; + ; ,,,,,,,}; ]; int cnt; struc…
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 高精压位GCD 对于  GCD(a, b)  a>b 若 a 为奇数,b 为偶数,GCD(a, b) = GCD(a, b / 2) 若 a 为偶数,b 为奇数,GCD(a, b) = GCD(a / 2, b) 若 a 为偶数,b 为偶数,GCD(a, b) = 2*GCD(a / 2, b / 2) 若 a 为奇数,b 为奇数,GCD(a, b) = GCD(a - b, b) vect…
题目链接 这题.高精度.恶心.难受. 那么高精度的gcd怎么做呢? 若a=b gcd(a,b)=a ①a偶b偶 gcd(a,b)=2*gcd(a/2,b/2) ②a偶b奇 gcd(a,b)=gcd(a/2,b) ③a奇b奇 gcd(a,b)=gcd(a-b,b) 嗯.这玩意就这样了. #include<cmath> #include<iostream> #include<cstdio> #include<algorithm> #include<cstr…
辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gcd(a,b)=2*gcd(a/2,b/2) 3.若a,b都是奇数:gcd(a,b)=gcd(a-b,b) (a>b) 然后就涉及到高精度乘单精度,高精度减高精度,高精度除单精度………
题目大意 求两个个高精度数的gcd 题目解析 在学习gcd的时候,书上就记载了"更相减损术"这一方法 基于这种方法,我们进行优化,使得我们能快速求出两个大数的gcd 对于 \(a,b\) 的 \(GCD(a, b)\) 有 [1]. 若 \(a\) 为奇数,\(b\) 为偶数,\(GCD(a, b) = GCD(a, b / 2)\) 表示 \(b\) 存在2这个因子而 \(a\) 不存在,则将 \(b\) 除以2,,不考虑因子2: [2]. 若 \(a\) 为偶数,\(b\) 为奇数…
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你 决定写一个程序来教训他. Input 共两行: 第一行:一个数A. 第二行:一个数B. 0 < A , B ≤ 10 ^ 100…
题目 Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你 决定写一个程序来教训他. 输入格式 共两行: 第一行:一个数A. 第二行:一个数B. 0 < A , B ≤ 10 ^ 10000. 输出格式 一行,表示A和B的最大公约数. 输入样例 12 54 输出样例 6 题解 时隔大半年,我回来A这道题啦[当初…
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1876 一道简单的高精度+Stein算法(或者叫辗转相除法)求最大公约数板子题. md还要压位.. 代码: #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> #include<iostream> #incl…
Stein算法是一种计算两个数最大公约数的算法,是针对欧几里德算法在对大整数进行运算时,需要试商导致增加运算时间的缺陷而提出的改进算法. 算法思想: 由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加减法,为了说明Stein算法的正确性,首先必须注意到以下结论: gcd(a,a)=a,也就是一个数和其自身的公约数仍是其自身. gcd(ka,kb)=k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换.特殊地,当k=2时…
题面就是让你求两个超级大整数,求GCD 题解: 题目本意应该是出题人想考考高精度取膜 但是可以通过一种神奇的Stein算法来做 由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加减法,为了说明Stein算法的正确性,首先必须注意到以下结论: gcd(a,a)=a,也就是一个数和其自身的公约数仍是其自身. gcd(ka,kb)=k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换.特殊地,当k=2时,说明两个偶数的最大公…
点此看题面 大致题意: 给你两个长度\(\le10000\)的正整数,让你求它们的\(gcd\). Python​ 高精请绕道. 这题的正解应该是Python. 对于这种高精题,肯定是Python最方便了. 于是我就默默写了Python. 代码 n=(int)(input())#读入第一个整数 m=(int)(input())#读入第二个整数 while n!=m:#辗转相减法(不知道为什么辗转相除法RE了) if n>m:#如果n>m n-=m#将n减去m else:#否则 m-=n#将m减…
传送门 非常显du然liu的一道题 就是求GCD 因为数据范围... 所以要上压位高精+非递归的辗转相减 关于辗转相减: 如果 A是二的倍数,B是二的倍数   那么GCD(A,B)=2 * GCD(A,B) 如果只有A是二的倍数   那么GCD(A,B)=GCD(A/2,B) 如果只有B是二的倍数   那么GCD(A,B)=GCD(A,B/2) 十分显然的结论... 然后不停地让大的数减去小的数 最后当它们相等时就是GCD了(因为大的减小的一直减到不能减就相当于取模) int slove() {…
要你求两个非常大的数字的GCD. 不要想复杂,用高精度整更相减损术即可. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct BigInt { static const int BASE = 10000, CARRY = 4, MAX_N = 10000; int A[MAX_N], Len; void Clear() { memset(A, 0, s…
这道题直接写了我两个多小时-- 主要是写高精度的时候还存在着一些小毛病,调了很久 在输入这一块卡了很久. 然后注意这里用while的形式写,不然会炸 最后即使我已经是用的万进制了,但是交上去还是有两个点超时 然后就开始漫长的改进,一直过不了那两个点. 然后突然发现,貌似这道题没有涉及到乘法. 那不就可以直接开10的九次方为一位了(10的9次方是int的最大数量级) 我交上去之后就AC了,全部测试点交上去总和4.6秒 然后原来我一个数开的是2500这么大,因为题目给的10000位,之前用万进制除以…
题意简述 求两个整数a,b的最大公约数0 < a , b ≤ 10 ^ 10000. 题解思路 如果 a % 2 == 0 && b % 2 == 0 gcd(a,b) = gcd(a / 2, b / 2) * 2 如果 a % 2 == 0 && b % 2 != 0 gcd(a,b) = gcd(a / 2, b); 如果 a % 2 != 0 && b % 2 == 0 gcd(a,b) = gcd(a, b / 2); 如果 a % 2 !=…
-题目の传送门- 题目大意: 找到第k个无平方因子数. 看到数据范围很大, 我们要采用比\(O(n)\)还要小的做法. 考虑如果前\(x\)个数中有\(k-1\)个无平方因子数, 而前\(x+1\)个数中有\(k\)个无平方因子数, 那么\(x\)即为所求. 而由某种我不会的方式可以证明出答案是不会超过\(2n\)的, 所以我们可以二分答案. 问题就转化成了求前\(x\)个数中有多少个无平方因子数. 我们要求无平方因子数就要把所有的有平方因字数筛掉, 为了保证不重不漏, 我们考虑容斥. 我们枚举…
退役之前写的 然后因为退役就咕咕咕了... 后来发现数学考试能用的到个鬼就发布出来了QwQ 主要是方便自己没登录的时候查阅... 显然子集什么的是没有学会的QwQ 所以学OI的话不要看本文!!!!!> 以下是懒得修改和编辑的原文: 基本引用自vfleaking大大的幻灯片... 我知道我写的没人看你萌只想要个链接而已~ 本文注释~ 为了不影响阅读就添加一个跳转咯~ 什么是反演: 假设有两个函数\(f\)和\(g\)满足 \[ f(n)=\sum_ka_{n,k}g(k) \] 已知\(g\)求\…
两个题的传送门 对于CF这道题, 分别考虑每种可能的集合大小, 每个大小为\(k\)的集合数量有\(\binom nk\)个, 所以最后的答案就是 \[\sum_{i=0}^n\binom{n}{i}i^k\] 对于bzoj这道题, 我们分别考虑每个点的贡献, 这个点可以和其他\(n-1\)个点连任意条边, 贡献是\(\sum_{i=0}^{n-1}\binom{n-1}ii^k\) 此时其他\(n-1\)个点间的\(\frac{(n-1)(n-2)}2\)条边可连可不连, 所以有\(2^{\f…