Loading

随笔分类 -  ACM题解

摘要:给定 x ,y 问有多少个k元组使得其gcd = x, sigma = y , k随意 首先进行转化,相当于 有多少个k元组满足 gcd = 1,sigma = y / x 。 因此容易得出 y % x != 0 时,输出0 现在相当于计算有多少个gcd = 1 的组 使得sigma = y / x 阅读全文
posted @ 2020-08-08 19:00 MQFLLY 阅读(105) 评论(0) 推荐(0)
摘要:两人玩游戏,对于一个自然数,每一轮必然是某人得分 * k ,另一人得分 *k*k 给出最终两人的分数,问是否合理。 很自然想到的做法:算出a*b的三次根式,判断这个能否整除a和b。具体证明不太会,CF猜就完事了 方法:二分。当然也可以预处理进入map int main() { int T = rea 阅读全文
posted @ 2020-08-08 10:18 MQFLLY 阅读(124) 评论(0) 推荐(0)
摘要:要求对一个数进行加法分解,问最多能分成多少个合数。 问最多的合数,那么结果必然是有 4, 6 , 9 组成 考虑 n % 4的情况即可。 主要是要想到其他合数都可以用4,6,9组成 int main() { int Q = readint(); while (Q--) { ll n = readll 阅读全文
posted @ 2020-08-08 09:52 MQFLLY 阅读(226) 评论(0) 推荐(0)
摘要:求n! 在base进制下的位数。 10进制下 Log10(x) 就是x的位数。 base进制下同理。 记得开double double pre[maxn]; void init() { pre[0] = log(1); for (int i = 1; i < maxn; i++) pre[i] = 阅读全文
posted @ 2020-08-07 23:15 MQFLLY 阅读(121) 评论(0) 推荐(0)
摘要:求一个数组的m段的最大子段和。 dp[i][j] 表示 当前是第i段,且最后一个元素是a[j]时的最大子段和。那么有两种转移,作为第i段的最后一个元素 或者 第i段的第一个元素。 状态转移方程为dp[i][j]=max(dp[i][j-1]+a[j],dp[i-1][k]+a[j]) i-1<=k< 阅读全文
posted @ 2020-08-07 23:08 MQFLLY 阅读(119) 评论(0) 推荐(0)
摘要:给定n * n矩阵C ij(1 <= i,j <= n),我们要找到0或1的n * n矩阵X ij(1 <= i,j <= n)。 此外,X ij满足以下条件: 1.X 12 + X 13 + ... X 1n = 1 2.X 1n + X 2n + ... X n-1n = 1 3.对于每个i(1 阅读全文
posted @ 2020-08-07 11:11 MQFLLY 阅读(80) 评论(0) 推荐(0)
摘要:注意建树范围开大一点。 x 先让其 +1 ,树状数组不能维护0 这个点。 int n; int c[32005]; struct Point { int x, y; Point(int _x = 0, int _y = 0) { x = _x; y = _y; } friend bool opera 阅读全文
posted @ 2020-08-07 11:06 MQFLLY 阅读(93) 评论(0) 推荐(0)
摘要:给定字符串,输出所有相等的前后缀的长度。 首先容易想到Next[len2] 必然满足题目要求。 接下来的所有也满足的必然是s2[1 ~ Next[len2]]的前后缀,即是一个递归的过程。 char s1[1005], s2[400005]; int Next[400005]; int len1, 阅读全文
posted @ 2020-08-07 10:41 MQFLLY 阅读(88) 评论(0) 推荐(0)
摘要:题意:给定一个字符串,问最少需要添加几个字符可以使之变为循环序列。 考虑到字符串的最小循环节。 对于len2这个点,若len2 % (len2 - Next[len2]) == 0 则存在最小循环节,长度即len2 - Next[len2]。循环次数 len2 / (len2 - Next[len2 阅读全文
posted @ 2020-08-07 10:24 MQFLLY 阅读(99) 评论(0) 推荐(0)
摘要:和上题类似,同样是区间染色,但是此题范围0 - 8000,不用离散化,暴力统计即可, ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); } ll Lcm(ll a, ll b) { return a / gcd(a, b) * b; } 阅读全文
posted @ 2020-08-07 09:35 MQFLLY 阅读(105) 评论(0) 推荐(0)
摘要:n <= 10000 人贴海报,问最后可以看到的海报的个数。 1<=li<=ri<=10000000 由于范围很大,注意离散化。 bool vis[maxn * 4]; int a[maxn * 4]; int L[maxn * 4]; int R[maxn * 4]; int lazy[maxn 阅读全文
posted @ 2020-08-07 09:32 MQFLLY 阅读(100) 评论(0) 推荐(0)
摘要:区间增加 区间查询和 struct Tree { int l, r; ll sum; }; Tree node[maxn * 4]; ll a[maxn]; ll lazy[maxn * 4]; void Pushdown(int rt, int m) { if (lazy[rt]) { lazy[ 阅读全文
posted @ 2020-08-07 09:30 MQFLLY 阅读(90) 评论(0) 推荐(0)
摘要:n <= 5e5 两种操作:1.询问 L ,R 能否通过修改一个数使得区间gcd为x 2. 修改某点的大小 首先联想到可以用线段树维护区间性质,单点修改。 如果判断1? 如果区间中所有数都是x的倍数,那么只需修改任意一个数变为x就可以。 如果区间中大于一个数不是x的倍数,由于仅仅能修改一次,所以肯定 阅读全文
posted @ 2020-08-07 09:28 MQFLLY 阅读(159) 评论(0) 推荐(0)
摘要:代码来自 《算法竞赛进阶指南》,品一品。 重点:试除法。 #pragma warning(disable:4996) #include<iostream> #include<algorithm> #include<bitset> #include<tuple> #include<unordered_ 阅读全文
posted @ 2020-08-04 22:42 MQFLLY 阅读(168) 评论(0) 推荐(0)
摘要:此题难点有三:1.是素数且是平方数的和的形式的数有哪些? 费马二平方定理:除了2这个特殊的素数,所有的素数都可以分两类:被4除余1的素数。 第二类则是被4除余3的素数。第一类素数都能表示为两个整数的平方和,第二类都不能。 因此此题可以转化为[L , R ]中有多少数是除以4余3的。 2.数据范围3e 阅读全文
posted @ 2020-08-04 13:48 MQFLLY 阅读(172) 评论(0) 推荐(0)
摘要:给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。 1.首先合并联想到区间,因此此题就是石子合并的变种 2.石子合并的条件是相邻,此题的条件是相邻且相等。注意是能“合并“出多少。 于是状态 阅读全文
posted @ 2020-08-03 10:18 MQFLLY 阅读(133) 评论(0) 推荐(0)
摘要:区间DP是线性DP的一种,它以“区间长度”作为DP的“阶段”,使两个坐标(区间的左右端点)描述每个维度。 区间DP中,一个状态由若干个比它更小且包含于它的区间所代表的状态转移而来。区间DP的初态一般就由长度为1的“元区间”组成。这种向下划分,再向上递推的模式与某些树形结构如线段树有很大的相似之处。 阅读全文
posted @ 2020-08-01 20:12 MQFLLY 阅读(198) 评论(0) 推荐(0)
摘要:The following rules define a kind of integer tuple - the Legend Tuple:• (1; k) is always a Legend Tuple, where k is an integer.• if (n; k) is a Legend 阅读全文
posted @ 2020-08-01 18:46 MQFLLY 阅读(223) 评论(0) 推荐(0)
摘要:按横坐标增序给n个点,问从最左点走到最右点,再从最右点走到最左点的最小路程。 对此题进行转化:有两个人从最左点出发,终点是最右点。问两人怎样决策可以使得总路程最小。 不妨设 i > j dp[i][j]表示一个人在i号点,另一个人在j号点,走到终点的最小路程。 对于下一个点,总有一个人要进行选择。 阅读全文
posted @ 2020-08-01 11:54 MQFLLY 阅读(115) 评论(0) 推荐(0)
摘要:有n件女装,每个女装有魅力指数val,初始指定k,从这个女装开始算然后把这件女装扔了,其得到的分数是 j 的因子个数,然后找下一个女装,若当前女装的val是负数,则逆时针找接下来的第k个,否则顺时针找第k个。 问最终的最大分数是多少。 因子个数由于n<=5e5 ,可以考虑提前筛好因子个数函数。难点在 阅读全文
posted @ 2020-08-01 10:02 MQFLLY 阅读(134) 评论(0) 推荐(0)