
数学-计数问题
文章平均质量分 50
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
hdu 5514 Frogs(计数)
题目链接:hdu 5514 Frogs解题思路首先,一只青蛙的步长为x,那么k * gcd(x,m)都是这只青蛙会经过的地方。 如果直接计算每只青蛙的贡献,会有重复的地方被计算多次。我的做法是将m的因子处理出来,判断每个因子的d,是否k*d的地方会被经过。然后从小的因子开始,如果经过,但未加上贡献,就加上它的贡献,并且更新比它大的因子;如果经过多次,则要减掉超出的贡献。代码#include <cs原创 2015-11-02 09:44:08 · 1875 阅读 · 0 评论 -
hdu 4908 BestCoder Sequence(计数)
题目链接:hdu 4908 BestCoder Sequence题目大意:给定N和M,N为序列的长度,由1~N组成,求有多少连续的子序列以M为中位数,长度为奇数。解题思路:v[i]记录的是从1~i这些位置上有多少个数大于M,i-v[i]就是小于M的个数。pos为M在序列中的位置。如果有等式i−j=2∗(v[i]−v[j−1]),i≥pos≥j,那么i和j既是一组满足的情况。将等式变原创 2014-08-03 23:07:40 · 1137 阅读 · 0 评论 -
uva 10542 - Hyper-drive(容斥)
题目链接:uva 10542 - Hyper-drive题目大意:给定n维空间的线段,问说线段经过几个格子。解题思路:对于线段可以将一点移动至原点,变成(0,0)到(a,b)这条线段,以二维为例,每次会从一个格子移动到另一个格子,可以是x+1坐标,也可以是y+1,所以总的应该是a+b-1,扣除掉x+1,y+1的情况gcd(a,b)-1 (原点)。映射成n维就要用容斥原理计算结果原创 2014-08-02 23:20:41 · 1343 阅读 · 4 评论 -
uva 1510 - Neon Sign(计数)
题目链接:uva 1510 - Neon Sign题目大意:给定n个点,任意三点不共线,并且两两点之间有一条线,给定线的颜色。问说有多少个三角形三边同色。解题思路:对于每个点,记录该点黑色边的数量和红色边的数量,考虑以该点为顶点的三角形,从红色边中选一条,黑色边中选一条,组成的三角形一定是不满足的。因为一个不同色三角形会有两个点满则,所以考虑了两次。用总的个数减掉不同色的即可。原创 2014-07-27 15:12:15 · 1641 阅读 · 0 评论 -
uva 10458 - Cricket Ranking(容斥+高精度)
题目连接:uva 10458 - Cricket Ranking题目大意:给定k和n,表示有k个比赛,总共要的n分,每个比赛可以得l~r的分数,问说可以有多少种得分方式。解题思路:容斥,可以参考Codeforces 451E.#include #include #include using namespace std;typedef long long ll;con原创 2014-07-27 16:24:31 · 1311 阅读 · 0 评论 -
uva 11290 - Gangs(卡特兰数)
题目链接:uva 11290 - Gangs题目大意:给出n和k,表示要构造一个长度为2*n-2的字符串,OG序列为k的字符串(类似于出栈入栈)。如果字符s2先回到原点(即栈空),那么s2 OG s1如果s1和s2同事回答原点,那么忽略头尾的ES进行比较如果s1和s2的前t个相同,扣掉前t个字符考虑解题思路:出栈入栈的个数是卡特兰数,每次考虑两个部分Sstr1Estr2原创 2014-07-27 23:17:48 · 1654 阅读 · 0 评论 -
uva 11246 - K-Multiple Free set(数论)
题目链接:uva 11246 - K-Multiple Free set题目大意:给定n,k。求一个元素不大于n的子集,要求该子集的元素尽量多,并且不含两个数满足a∗k=b.解题思路:容斥原理,f(i)=(−1)inki,取f函数的和即可。#include #include #include using namespace std;typedef long long原创 2014-07-04 22:45:54 · 1624 阅读 · 0 评论 -
Codeforces 451E Devu and Flowers(容斥原理)
题目链接:Codeforces 451E Devu and Flowers题目大意:有n个花坛,要选s支花,每个花坛有f[i]支花。同一个花坛的花颜色相同,不同花坛的花颜色不同,问说可以有多少种组合。解题思路:2n的状态,枚举说那些花坛的花取超过了,剩下的用C(n−1sum+n−1)隔板法计算个数,注意奇数的位置要用减的,偶数的位置用加的,容斥原理。#include #inc原创 2014-07-25 11:01:03 · 3564 阅读 · 4 评论 -
uva 294 - Divisors(枚举+计数)
题目连接:uva 294 - Divisors题目大意:给出一个范围L~U,问说在该范围中因子数最多的数是多少。解题思路:枚举L~U中的数,将数分解成质因子,利用乘法原理求总因子数。#include #include #include int countFactor (int x) { int ans = 1; int m = sqrt(x+0.5);原创 2014-07-02 13:21:55 · 1198 阅读 · 0 评论 -
uva 10574 - Counting Rectangles(计数)
题目链接:uva 10574 - Counting Rectangles题目大意:给出n个点,问选出4个点作为定点,可以组成多少个平行与坐标轴的矩形。解题思路:首先将点按照x排序(优化),然后处理出所有平行于y轴的线段,记录这些线段的y1和y2,接着只要找出y1和y2值均相等的边,C(2cnt).#include #include #include using name原创 2014-05-29 13:03:10 · 1388 阅读 · 0 评论 -
uva 11123 - Counting Trapizoid(容斥+几何)
题目链接:uva 11123 - Counting Trapizoid题目大意:给定若干个点,问有多少种梯形,不包括矩形,梯形的面积必须为正数。因为是点的集合,所以不会优重复的点。解题思路:枚举两两点,求出该条直线,包括斜率k,偏移值c,以及长度l。已知梯形的性质,一对对边平行,也就是说一对平行但是不相等的边。所以将所有线段按照斜率排序,假设对于某一斜率,有m条边,那么这m原创 2014-06-30 17:48:36 · 1036 阅读 · 0 评论 -
uva 12034 - Race(dp计数)
题目链接:uva 12034 - Race题目大意:有n匹马比赛,问说有多少种排名情况,可以并列。解题思路:dp[i][j]表示i匹马,最后一名为j的情况,转移方程dp[i][j]=(dp[i−1][j]+dp[i−1][j−1])∗j#include #include typedef long long ll;const int N = 1005;const ll原创 2014-05-25 23:20:11 · 1721 阅读 · 0 评论 -
uva 12075 - Counting Triangles(容斥原理)
题目链接:uva 12075 - Counting Triangles题目大意:一个n∗m的矩阵,求说有选任意三点,可以组成多少个三角形。解题思路:任意选三点C(3(n+1)∗(m+1))但是有些组合是不可行得,即为三点共线,除了水平和竖直上的组合,就是斜线上的了,dp[i][j]即为ij情况下的斜线三点共线。#include #include typedef long原创 2014-05-25 09:47:14 · 2144 阅读 · 0 评论 -
uva 11481 - Arrange the Numbers(计数问题)
题目链接:uva 11481 - Arrange the Numbers题目大意:给出n,m和k,表示有一个序列,由1~n组成,有序,现在将这个序列重排,问有多少种重排序列满足:前m个中恰好有k个的位置不变(即i=pos[i])。解题思路:首先c=C(km)为前m个数选中k个位置保持不变,然后枚举后n-m个中有多少个数的位置是不变的,C(in−m),这样就有n−k−i个数为乱序排列原创 2014-05-25 23:13:10 · 1449 阅读 · 0 评论 -
hdu 4832 Chess(计数+dp)
题目链接:hdu 4832 Chess题目大意:略。(注意King只能走周围8格)解题思路:将水平和竖直分开考虑,l[i]表示竖直上走i步不出界的种数,r[i]表示水平上走i步不出界的种数,然后枚举水平竖直走的步数(相加为k),并且要乘以组合数。因为确定步数了但是还要考虑先后的关系。处理步数的时候,开一个二维数组dp[i][j],表示i步,位置在j的种数,j为偏移,j-k为负数原创 2014-05-25 20:24:10 · 1265 阅读 · 0 评论 -
hdu 4909 String(计数)
题目链接:hdu 4909 String题目大意:给定一个字符串,由小写字母组成,最多包含一个问号,问号可以表示空或者任意一个字母。问有多少个子串,字母出现的次数均为偶数。解题思路:因为最多又26个字母,对应每个字母的奇数情况用1表示,偶数情况用0.将一个前缀串表示成一个二进制数。然后对于每种相同的数s,任选两个即为一种可行子串(组合数学). 接着对于有问号的情况枚举一下问号替代的原创 2014-08-03 23:20:46 · 1419 阅读 · 0 评论 -
uva 1549 - Lattice Point(暴力)
题目链接:uva 1549 - Lattice Point题目大意:给定圆半径,以原点为圆心,求园内有多少个整数点。解题思路:首先坐标轴将圆分成4份,所以只要单独考虑每一块的个数乘4再加1即可(原点)#include #include #include #include using namespace std;const double pi = 4 * atan(1原创 2014-08-18 19:31:55 · 1266 阅读 · 0 评论 -
hdu 4944 FSF’s game(数论)
题目链接:hdu 4944 FSF’s game题目大意:给定N,可以用不大于N的长a和宽b,组成N∗(N−1)2种不同的矩形,对于每个矩形a∗b要计算它的值,K为矩形a,b可以拆分成若干个K∗K的正方形。∑a∗bgcd(a/k,b/k),输出所有矩形值的和。解题思路:假设有边a和b,那么k肯定即使a的因子也是b的因子。定义f(n)为矩形最长边等于n的情况下所有矩形值的和。那么f(原创 2014-08-12 19:25:26 · 2138 阅读 · 9 评论 -
hdu 4633 Who's Aunt Zhang(polya)
题目链接:hdu 4633 Who’s Aunt Zhang代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int mod = 10007;int inv24, P[100];int pow_mod(int x, int n, int mod) { int ret =原创 2015-10-28 21:38:06 · 1114 阅读 · 0 评论 -
hdu 4698 Counting(计数)
题目链接:hdu 4698 Counting解题思路考虑不可行的四元组,用所有方案数减掉。将x按照坐标排序,保证某些x满足时,对应的y不满足,累加求和。代码#include <cstdio>#include <cstring>#include <set>#include <algorithm>using namespace std;typedef set<int>::iterator ite原创 2015-11-12 14:41:40 · 666 阅读 · 0 评论 -
hdu 4705 Y(计数)
题目链接:hdu 4705 Y代码#pragma comment(linker, "/STACK:16777216") #include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;typedef unsigned long long ll;const int max原创 2015-11-12 14:50:04 · 601 阅读 · 0 评论 -
hdu 4602 Partition(计数)
题目链接:hdu 4602 Partition代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int mod = 1e9 + 7;int N, K;long long pow_mod(long long x, int n) { if (n < 0) return 0;原创 2015-10-26 21:14:37 · 570 阅读 · 0 评论 -
LightOJ 1005 - Rooks(计数)
题目链接:LightOJ 1005 - Rooks代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;int N, K;ll C(int n, int k) { if (n - k < k) k = n - k; ll ret = 1;原创 2015-11-09 20:42:23 · 525 阅读 · 0 评论 -
zoj 3901 Ant(计数)
题目链接:zoj 3901 Ant代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int mod = 1e9+7;ll pow_mod(ll x, int n) { ll ret = 1; while (n) {原创 2015-10-22 19:17:21 · 666 阅读 · 0 评论 -
hdu 4790 Just Random(计数)
题目链接:hdu 4790 Just Random代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;ll M, P;ll gcd (ll a, ll b) { return b == 0 ? a : gcd(b, a%b); }ll lower(l原创 2015-10-22 19:31:42 · 459 阅读 · 0 评论 -
hdu 4675 GCD of Sequence(计数)
题目链接:hdu 4675 GCD of Sequence代码#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;const int maxn = 300000;const int mod = 1e9 + 7;int fac[maxn + 5], inv[ma原创 2015-11-06 21:52:15 · 635 阅读 · 0 评论 -
hdu 5471 Count the Grid(容斥)
题目链接:hdu 5471 Count the Grid解题思路比赛的时候想太复杂了,因为n只有10,直接搞个容斥就可以解决了。 首先将矩形切割成若干不相交的小矩形,即同一小矩形中的点状态一致,然后判断每个小矩形中v的最大值能是多少,接着考虑单一v值的情况下,用容斥求出答案。复杂度为o(1024*1024)代码#include <cstdio>#include <cstring>#includ原创 2015-09-30 16:27:58 · 1328 阅读 · 0 评论 -
hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)
题目链接:hdu 5468 Puzzled Elena解题思路预处理出每个数的因子(注意只需要质因子幂数最大为1的数,例如6=21∗316=2^1 * 3^1)然后用一个数组维护,fac[i]表示说当前有fac[i]个数包含i这个因子。然后dfs遍历这棵树,第一次遍历到节点u时,通过fac数组计算出现在有多少个数与W[u]不互质,待遍历完u的子树后,再计算一次,两个相减即为u子树中与W[u]不互质的原创 2015-09-30 16:17:50 · 920 阅读 · 0 评论 -
hdu 5399 Too Simple(计数)
题目链接:hdu 5399 Too Simple注意未知置换个数为0时,原有序列并不满足的时候ans为0#include #include #include using namespace std;const int maxn = 105;const int mod = 1e9 + 7;typedef long long ll;int N, M, C, A原创 2015-08-19 23:58:31 · 720 阅读 · 0 评论 -
hdu 5400 Arithmetic Sequence(计数)
题目链接:hdu 5400 Arithmetic Sequence#include #include #include using namespace std;const int maxn = 1e5 + 5;typedef long long ll;int N, D1, D2, A[maxn];int main () { while (scanf("%d%d%d"原创 2015-08-19 23:59:51 · 646 阅读 · 0 评论 -
hdu 5297 Y sequence(容斥)
题目链接:hdu 5297 Y sequence考虑62以内的指数,x为奇数个质数因子,就减掉,偶数个加上。计算x为指数的不满足数直接pow(n,1/x)即可。#include #include #include #include #include #include using namespace std;typedef long long ll;cons原创 2015-07-31 22:15:58 · 778 阅读 · 0 评论 -
Codeforces 483B Friends and Presents(二分+数论)
题目链接:Codeforces 483B Friends and Presents题目大意:要将1~v直间的数分配到两个集合中,第一个集合需要cnt1个数,第二个需要cnt2个数,第一个集合中的数不能是x的倍数,同理第二个集合不能是y的倍数,两集合元素不能相同,问说v最小可以为多少。解题思路:这题比第三题要难,想了有一会。二分答案,v,然后判断。判断的时候只要分原创 2014-11-03 09:54:31 · 1366 阅读 · 0 评论 -
uva 1436 - Counting heaps(计数)
题目链接:uva 1436 - Counting heaps题目大意:给出一个树的形状,现在为这棵树标号,保证根节点的标号值比子节点的标号值大,问有多少种标号树。解题思路:和村名排队的思路是一只的uva11174,最后问题只和树德结构有直接关系,f(root)=(s(root)−1)!(s(1)∗s(2)∗⋯∗s(n)但是给定的取模数不是质数,所以不能用逆元做,只能将分子分原创 2014-06-27 23:47:05 · 1444 阅读 · 0 评论 -
Codeforces 439E Devu and Birthday Celebration(计数问题)
题目链接:Codeforces 439E Devu and Birthday Celebration题目大意:给出q,表示询问的次数,每次询问有n和f,问有多少种分类方法,将n分成f份,并且这f份的最大共约数为1.解题思路:如果不考虑说最大共约数为1的话,那么问题很简单,就是f个数的和为n的种数C(f−1n−1).所以我们就尽量将问题转化成说f数的和为s的子问题。用容斥原理,总的可原创 2014-06-27 18:43:02 · 1424 阅读 · 0 评论 -
uva 12508 - Triangles in the Grid(几何+计数)
题目链接:uva 12508 - Triangles in the Grid题目大意:给出n,m,A和B,要求计算在(n+1)∗(m+1)的矩阵上,可以找出多少个三角形,面积在AB之间。解题思路;首先枚举矩阵,然后计算有多少个三角形以该矩阵为外接矩阵,并且要满足体积在AB之间。然后对于每个矩阵,要确定在大的范围内可以确定几个。枚举矩阵的内接三角形可以分为三类:1.三原创 2014-06-27 13:01:17 · 1496 阅读 · 0 评论 -
uva 11027 - Palindromic Permutation(组合数)
题目链接:uva 11027 - Palindromic Permutation题目大意:给出字符串,以及n,然后字符串中的字母排序可以组成若干的字符串,有些为回文串,输出第n个回文串,若不存在第n个回文串,输出“XXX”。解题思路:以为n非常大,所以用枚举是由点不太现实的,对于一个字符串,若能重排成回文串,说明每个字母出现的次数都为偶数,或者说为奇数的只有一个(可以放在中原创 2013-11-10 11:25:48 · 1441 阅读 · 0 评论 -
uva 10616 - Divisible Group Sums(计数)
题目链接:uva 10616 - Divisible Group Sums题目大意:给出n和q,表示有n个数字,q次询问,然后给出n个数字,q次询问,每次询问有两个数值,D和N,计算出n个数字中选出N个数字的和能整除D的方案有多少种。解题思路:因为(a + b)% D = (a%D+b%D)%D,所以可以将所有的数字全先模掉D,这样计算量会比较少,然后利用dp中背包的思想,原创 2013-11-05 21:21:23 · 2116 阅读 · 0 评论 -
uva 10912 - Simple Minded Hashing(计数)
题目链接:uva 10912 - Simple Minded Hashing题目大意:给出l和s,表示说用l个字母,组成一个字符串,字符串的权值和要刚好等于s,并且字母要升序排列,不可以重复使用,问有多少种组成。解题思路:简单dp,三维数组dp[i][j][k]表示说i个字符,最后一个字符为j(即为最大字符为j),quan原创 2013-11-05 21:15:04 · 2166 阅读 · 0 评论 -
uva 10247 - Complete Tree Labeling(dp)
题目链接:uva 10247 - Complete Tree Labeling题目大意:给出k和d,表示有一个k叉d层的完全k叉数,然后它的节点数为n个,用1~n给这棵树德节点标号,要求说任意一个节点的值不能大于它的任意一个子节点,每个数只能用一次。问优多少种标记的方法。解题思路:一般dp都是有dp[i - 1]推导出dp[i]的,这题也不例外,只不过思路和往常不太一样。节原创 2013-11-17 00:21:49 · 3461 阅读 · 0 评论 -
uva 10328 - Coin Toss(计数问题)
题目链接:uva 10328 - Coin Toss题目大意:给出n,表示有投掷n次硬币,硬币有分正反面,玩游戏的人比较迷信,如果他选择正面获胜的话,第二次他还是会选正面(不知道这句话要说什么,应该是背景),然后给出k,问说出现连续正面的此处大于 等于k的情况有多少种,比如说:3 2,投掷3次或有8中情况,满足说有两个以上连续的'H'(正面)的情况只有“HHH”, “HHT”, “TH原创 2013-11-04 19:01:15 · 4842 阅读 · 1 评论