[CF 1780B] GCD Partition】的更多相关文章

传送门 简单的中国剩余定理练习. 首先行数一定是$lcm$,然后只要确定最小的列数就能判定解合不合法了. 我们可以得到线性模方程组: $y \equiv 0 \pmod{a_1}$ $y+1 \equiv 0 \pmod {a_2}$ $y+2 \equiv 0 \pmod {a_3}$ $...$ $y+n \equiv 0 \pmod {a_{n+1}}$ 然后CRT搞出来一组解,暴力判判就OK了. //CF338D //by Cydiater //2017.2.20 #include &l…
题意 #include<bits/stdc++.h> #define t 200000 #define MAXN 200100 using namespace std; int n; int fa[MAXN],fa1[MAXN]; long long ans[MAXN],size[MAXN]; vector <int> e[MAXN],Edge[MAXN]; int find(int x){ if (x==fa1[x]) return fa1[x]; else return fa1…
题目描述 CirnoCirnoCirno发现了一种bakabakabaka数,这种数呢只含有222和999两种数字 现在CirnoCirnoCirno想知道[L,R][L,R][L,R]中有多少个数能被bakabakabaka数整除 1<L<R<10101<L<R<10^{10}1<L<R<1010 题目分析 由于R<1010R<10^{10}R<1010,最大只有10位的数可以对答案造成贡献,每一位只能为2/9,所以最多有2000多…
[题目描述] 有一张N,M<=10^12的表格,i行j列的元素是gcd(i,j) 读入一个长度不超过10^4,元素不超过10^12的序列a[1..k],问是否在某一行中出现过 [题解] 要保证gcd(x,y)=a[i],显然x=lcm(a[1],a[2]……a[k]) 然后y%a[1]=0,即(y+i-1)%a[i]=0 即y%a[1]=0 y%a[2]=-1 …… y%a[n]=-(n-1) 这就转化为了中国剩余定理 求出y之后,只需验证gcd(x,y+i-1)=a[i]即可 /*******…
CF 979D Kuro and GCD and XOR and SUM(异或 Trie) 给出q(<=1e5)个操作.操作分两种,一种是插入一个数u(<=1e5),另一种是给出三个数x,k,s(<=1e5),求当前所有u中满足,k|u,x+u<=s,且\(x\oplus u\)最大的u. 做法好神啊.关于异或的问题有一种常见做法,就是利用01trie来查找在一堆数里面,哪个数与x的异或值最大.这道题就是这个思路.如果去掉k必须整除v这个条件,那么就转化成了上一个问题(只不过有最大…
CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1. 思路 由于每个数的质因子很少,题目的数据200000<2*3*5*7*11*13*17=510510.所以每个节点的质因子个数不多.那么树形DP的时候直接枚举每种因子即可. //#pragma GCC optimize(3) //#pragma comment(linker, "/STACK:102400000,102400000") /…
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 给定一个序列,a[1 ..k],问是否存在(i , j)使得 GCD(i , j + r - 1) = a[r]  (k>=r >=1),其中 i <= n && j + k - 1 <= m http://codeforces.com/contest/338/problem/D 首先容易知道row = lcm (a[…
传送门 [http://codeforces.com/contest/1047/problem/C] 题意 给你n个数,移除最少的数字使剩下的数字GCD大于初始GCD 思路 需要一点暴力的技巧,先求出初始GCD为g,并统计每个数字的个数这是减少复杂度的关键,令ans=0,我们从i=g+1开始枚举GCD为i的个数,进行统计每次更新ans=min(ans,n-cnt) 需要注意的是某个数的因子依然是那个数倍数的因子,如2 4 8.这样可以避免重复统计.具体看代码 代码 #include<bits/s…
Description: [ 着实比较羞愧,都想着去暴力,把算法(方法)也忘了] A只涂x,2x,3x……,B只涂y,2y,3y……问你A和B共同涂的墙的个数 Solution: 就是求x和y的lcm,这里倒是想到了用x * y = gcd * lcm,但是算区间个数的时候我竟然去暴力了!!!! 区间1 - b所有的出现的个数是 b / lcm 区间1 - a所有的出现的个数是a / lcm 两个一相减就是(a,b]的个数了 很明显我们把a舍去了,最后可以加个判断也可以是b / lcm - (a…
根据裴蜀定理,当且仅当选出来的集合的L[i]的gcd等于1时,才能表示任何数. 考虑普通的dp,dp[i][j]表示前i个数gcd为j的最少花费,j比较大,但状态数不多,拿个map转移就好了. $ \bigodot $ 技巧&套路: 裴蜀定理,gcd为1表示任何数. 当状态数不多的时候,map暴力转移dp. #include <bits/stdc++.h> using namespace std; void Work(int &x) { ; i * i <= x; ++i…