数论-------------------------
Toooooocold
这个作者很懒,什么都没留下…
展开
-
Codeforces 501D Misha and Permutations Summation
康托展开后的两个序列相加后 Mod(n!) 即为一个新的康托展开的序列,不过每一位都要考虑是否要进。因为n过大,所以用树状数组进行康托展开。而逆康托展开时,可以用二分查询,m-sum(m)是非降序列。代码:#includebits/stdc++.h>using namespace std;const int MAXN = 2e5+5;int n, a[MAXN]原创 2016-12-05 18:02:22 · 337 阅读 · 0 评论 -
Codeforces 55D Beautiful numbers
数位DP#includeusing namespace std;const int MAXN = 48;const int MOD = 2520;typedef __int64 ll;ll dp[20][MOD+5][MAXN];int a[20], h[MAXN];void ini() { memset(dp, -1, sizeof(dp)); in原创 2017-02-03 14:36:59 · 203 阅读 · 0 评论 -
HDU 6129 Just do it
dp(i, j)表示第i次变换第j列的数。 dp(i, j) = dp(i, j-1)^dp(i-1, j) = dp(i, j-2)^dp(i-1, j-1)^dp(i-1, j-1)^dp(i-2, j) = dp(i, j-2)^dp(i-2, j) => dp(i, j-2^n)^dp(i-2^n, j) 从m中的最高位或最低位开始递推。原创 2017-08-16 01:06:37 · 878 阅读 · 3 评论 -
UVALive 5063 Just Sum It
题意: 给你1~9这9个数字每个数字的最多选择个数,问他们所有不同的选择排列构造出的整数的整数和。思路: 用背包和组合数可以很容易得到任意情况的方案数,剩下的是考虑怎么求出每个数字对于答案的贡献。 假设数字aa有xx个,求出含有a≤x−1a\le x-1的所有方案数,再将最后一个aa插入。对于每一种方案有长度ll,枚举l+1l+1种插法,就可以得到aa出现过的所有位置了。原创 2017-08-27 14:55:12 · 167 阅读 · 0 评论 -
CodeForces Gym101550E Exponial
欧拉定理降幂公式原创 2017-11-24 11:16:08 · 386 阅读 · 0 评论 -
CodeForces Gym101161D Find C
二维平面,给两个整数点A,B,找k个整数点C使得ABC是个非退化三角形,并且三角形的内部和边上都没有整数点。题目转化为找到离这条直线最近的有整数点的平行线.原创 2017-11-23 14:01:03 · 219 阅读 · 0 评论 -
【自适应辛普森】Gym100198I Two Cylinders
Source:Source:Source: ASC3 Problem:Problem:Problem: 求两圆柱垂直相交的体积。 Idea:Idea:Idea: 积分积不出来,扔给自适应辛普森公式。Code:Code:Code:#include<bits/stdc++.h>using namespace std;#define fi first#define se ...原创 2018-03-13 13:45:16 · 187 阅读 · 0 评论 -
Wannafly挑战赛14F 细胞
Source:Source:Source:Wannafly挑战赛14 Problem:Problem:Problem: 已知t和m,ansi=∑k=0+∞2k∗C(t,k)∗[kmod2m==i]已知t和m,ansi=∑k=0+∞2k∗C(t,k)∗[kmod2m==i]已知t和m, \quad ans_i = \sum_{k=0}^{+\infty} 2^k*C(t, k)*[k \bmod...原创 2018-07-18 13:34:33 · 137 阅读 · 0 评论 -
【线性基】计蒜客 The Great Nim Game
Souce:Souce:Souce:ACM-ICPC 2018 南京赛区网络预赛 Problem:Problem:Problem: n=1e10000000堆石头;f(i)=(af(i−1)4+bf(i−1)3+cf(i−1)2+df(i−1)1+e−1)%k+1,(k≤212),表示每堆石头的大小。求多少个石头子集可以使得nim游戏的先手必胜。n=1e10000000堆石头;f(i)=(af(...原创 2018-09-01 22:34:48 · 435 阅读 · 3 评论 -
【杜教筛/min25筛】计蒜客 Easy Math
Source:Source:Source:ACM-ICPC 2018 徐州赛区网络预赛 Idea:Idea:Idea: f(n,m)=∑i=1mμ(i∗n)=μ(n)∗∑i=1mμ(i)[gcd(i,n)=1]f(n,m)=∑i=1mμ(i∗n)=μ(n)∗∑i=1mμ(i)[gcd(i,n)=1]f(n,m)=\sum_{i=1}^{m}\mu(i*n)=\mu(n)*\sum_{i=1}^...原创 2018-09-11 02:20:32 · 277 阅读 · 0 评论 -
Codeforces 815B Karen and Test
打表后可以发现当n为偶数时,相间的偶数行是有规律的,即a[i][j] = a[i-2][j]+a[i-2][j+2]。所以最后的两个数a[n][0]和a[n][1]分别由最初行的奇数列和偶数列得到,最初行的每个值的贡献符合二项式展开,及杨辉三角。如果n%4==0的话,答案由最后两个数相减得到,否则由两个数相加得到。如果n为奇数,那么就先把n模拟一遍,变成偶数。代码:#i原创 2017-06-18 21:47:44 · 809 阅读 · 0 评论 -
AtCoder 079F Namori Grundy
根据题意,题中的弱连通图有且仅有一个环。 对于一个不在环上的点u,可以得到a[u]为mex{a[v1], a[v2]…, a[vk-1], a[vk]},其中{v1, v2, …,vk-1,vk} 为由u连向的所有子节点。 对于一个在环上的点u,他的值是不确定的,因为他有一个子节点vk+1也在环中。所以该点的取值有两种可能,一种是让a[u] = mex{a[v1], a[v2]…, a[vk-1原创 2017-07-30 20:59:45 · 535 阅读 · 0 评论 -
Codeforces 582C Superior Periodic Subarrays
1. a[i] == a[i+k*n]2. a[i] >= a[i+k*s]=> a[i] >= a[i+k*g] ( g = gcd(n, s) )枚举g, 当一个子序列合法时,当且仅当序列中的每一个数为它所在环中的最大值。枚举位置i,得到关于i为终点的最长合法子序列。枚举长度s,每一个小于等于s的长度l对s的贡献为1,当且仅当gcd(n, s) == g再次枚举原创 2017-06-06 16:08:05 · 236 阅读 · 0 评论 -
Codeforces 733E Sleep in Class
容易得出,左边的'U'(包括自己)的数量大于右边的‘D’时,从字符串右端出去,反之从左边出去,即:if(sumu[i] else ans[i] += n-i+1;人在字符串内做左右来回运动,所以总距离为从出发点开始的所有右‘D‘-左‘U’的距离之和,知道出去为止,两个距离可以分开来求。代码:#includeusing namespace std;ty原创 2016-11-04 22:07:11 · 772 阅读 · 0 评论 -
Codeforces 734F Anton and School
先由 x|y + x&y = x+y得到a序列。因为b序列是&运算,用位运算可以用a序列反推回b序列进行验证。代码:#includebits/stdc++.h>using namespace std;const int MAXN = 2e5+5;typedef __int64 ll;ll a[MAXN], b[MAXN], c[MAXN], num[MAXN];原创 2016-11-22 18:06:32 · 318 阅读 · 0 评论 -
Codeforces 735D Taxes
哥德巴赫猜想,一个偶数可以是两个质数之和,那么一个奇数x有三种情况:1.x本身是质数2.(x-2)是质数,那么可以拆成两个质数3.拆成一个质数和一个偶数,即三个质数原创 2016-11-28 15:46:05 · 392 阅读 · 0 评论 -
HDU 6053 TrickGCD
设g(i)为公约数是i的倍数的方案数,f(i)为公约数是i的方案数。 则 g(n)=∑n|df(d)=∏i=1maing(n) = \sum_{n|d} f(d) = \prod_{i=1}^m\frac{a_i}{n} 由莫比乌斯反演可得, f(n)=∑n|dμ(dn)g(d)f(n) = \sum_{n|d} μ(\frac{d}{n}) g(d) 当n=1n = 1时, f(1)=∑1原创 2017-08-20 16:57:43 · 252 阅读 · 0 评论 -
HDU 6134 Battlestation Operational
把原式里的艾弗森约定用莫比乌斯函数展开:原创 2017-08-21 16:55:56 · 206 阅读 · 0 评论 -
HDU 6125 Free from square
由于对于一个合法的答案,sqrt(500)后的素数最多只会用到一个,所以只对前8个素数状压后01背包。 dp(S, k)表示素数状态为S时由k个自然数组成的方法有几种。 再对后面的素数分别01背包。原创 2017-08-18 22:09:08 · 427 阅读 · 0 评论 -
UVALive 6575 Odd and Even Zeroes
n!中有几个0等价于1~n中有min(因子2的个数,因子5的个数),因为因子2的个数必大于因子5的个数,ans为n/5+n/25+n/125… 将n转为5进制,假设n为1234,那么ans为(123+12+1|五进制)。此时要判断ans是否为偶数。 注意到如果一个数x为偶数进制,列如十进制,那么只要判断最后一个数是否是偶数即可,因为其他位的数都是乘以10的幂次,乘积皆为偶数,只有最后一位是乘以1原创 2017-08-04 00:42:23 · 326 阅读 · 0 评论 -
AtCoder 079D Decrease
注意到对于{0, 1, 2..., n-2, n-1}这个序列,可以从左至右进行无限次反向操作,那么只要对K%50进行单独处理就可以了。代码:#include#define fi first#define se second#define pb push_back#define CLR(A, X) memset(A, X, sizeof(A))using namespac原创 2017-07-30 14:32:06 · 322 阅读 · 0 评论 -
【差分+DP】Gym101620K Kitchen Knobs
Souce:Souce:Souce:2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)Problem:Problem:Problem:n=500n=500n=500个长度为7的整数。需要把每个整数都变成最大循环表示,每次操作可以使连续的一段整数循环移动k位(往左/往右),求最少操作。Idea:Idea:Idea:除去每...原创 2018-10-04 23:03:13 · 365 阅读 · 0 评论