- 博客(25)
- 收藏
- 关注
原创 CF#309(Div2)C(组合数的数学题)
题目的意思是有N个数,分别为1-N,然后给出每个数的个数Ci,然后要求一种排列,排列必须满足最后一个i不能在最后一个i+1的后面。 解答的方法,就是先排最后一个1,其余的1必然在它的前面,再排最后一个2,那么它的前面就有C1 + C2 - 1个数,他们可以随便排列,就是有重复数字的个数,就为 再放3,就把前面的1,2看做整体,思路跟前面的是一样的,所以最后的就是所有的组合方式
2015-06-26 16:29:42 428
原创 hdu5273(区间逆序对的个数)
题目的大致意思是有一个数组,然后有Q个询问,对于每次询问给出L和R,然后要给出每次L和R区间内的逆序对个数。 解答方法就是先算出ans[0][1...N-1]的结果,然后根据再来算ans[i][i+1...N-1](0#include "stdio.h"#include "string.h"#include "math.h"#include #include #include #
2015-06-24 09:35:12 2694
原创 高精度(还有其它的以后再补充)
只是实现了+,*,以及除以一个整数,其它遇到了就再补充。 struct BigData{ int s[105]; int len; BigData(int x){ Mem(s, 0); len = 0; while(x){ s[len] = x % 10; x /= 10; len ++; } } BigData(): len(0){ Mem(
2015-06-18 17:45:28 271
原创 uva11916(数学题,模方程)
题目的意思是有M*N列的格子,K种颜色,B个不能涂色的格子,涂色的约束条件是每一列相连的格子上不能是相同的颜色,然后总数Mod100000007的结果是等于R的,现在题目中告诉N,K,B,R,要求满足条件的最小M。 解答:根据B个格子的坐标,可以求出最小的行minM,然后求对于minM*N的格子有多少种方案,然后再往外扩展一行,又有多少种方案,假设求得Mod完之后的结果为a,那么往后每添加一
2015-06-16 15:29:26 490
原创 uva11426(数学题)
题目的大概意思是给你一个n,要求gcd(1,2) + gcd(1,3) + ... + gcd(i, j) + ... + gcd(n-1, n), 1 先按照递推的思路,设f(n) = gcd(1,n) + gcd(2,n) + ... + gcd(n-1,n), 那么ans(n) = ans(n-1) + f(n), 所以题目的关键就是求f(n),求f(n)就是要找到n的约数,一个一个
2015-06-15 15:44:52 386
原创 uva11361(数学题,记忆化搜索)
题目的大概意思是要找一种数字,要求这种数字对题目给定的K值有如下的作用: 首先该数字能被K整除,另外该数字的每一位数字和也能被K整除。 题目给定A,B,K,要求区间[A,B]中这种数字的个数。 做法就是搜索了f[i][j][k]代表后面还有i位,数除以K的模为j,每个位上数字和模K为k的个数。 然后,例如11361,首位为0时要求f[3][0][0],不过当首位为1时,后面
2015-06-13 15:45:59 546
原创 uva580(数学题)
题目大意是有n个盒子,每个盒子里面分别装的是U和L,然后当有3个或者大于3个的U在一块时,被叫做危险的组合,那么给一个数字n,要求它危险组合数的个数。 解答:f[i]表示有i个盒子时,危险组合的数目,分两种情况: 1.前i-1个盒子中已经出现了危险组合,那么第i个组合可以任意为U,L,个数为2*f[i-1]。 2.第i个盒子为U时,恰好出现了危险组合,那么最后三个就是为UUU,倒
2015-06-12 20:24:19 419
原创 uva10820(简单数学题)
题目的大概意思是有两个变量x,y,然后x,y都是小于n的,有一个函数f(x,y),另外f(x*k,y*k) = f(x,y),问f(x,y)在x,y都不超过n的时候的取值个数,很明显的就是记下来的想x,y必定是互素的,当然有一个另外就是1,1。 求解,很明显的就是转化为欧拉phi函数问题,求出1-n中与n互素的个数,然后x,y可以互换位置,求得的结果要乘以2。 #include "st
2015-06-12 19:19:03 443
原创 uva12169(扩展欧几里得)
题目的大意是给你一个递推式Xi = (a*Xi-1+ b ) Mod 10001,然后告诉奇数项,要你求出偶数项。 解法就是枚举a,然后根据前两个奇数项算出b。 可以推出下面的式子: 然后因为gcd(a+1,10001) = 1,然后根据扩展欧几里得算出b来,随后再来验证,如果正确即为满足条件的解。 #include "stdio.h"#include
2015-06-12 16:47:28 337
原创 uva11806(容斥定理)
题目的大意就是在一个m行n列的棋盘上放k颗棋子,要求是在第一行和最后一行,第一列和最后一列都有棋子,应该说分类的话,也可以做出来,但是比较繁琐,而且容易出错。 解答可以用容斥定理,分别设A,B,C,D为第一行没有棋子,最后一行没有棋子, 第一列没有棋子,最后一列没有棋子,答案就是在棋盘上,但是不在ABCD上的。 然后容斥定理计算即可,减去奇数情况的。 #include "stdi
2015-06-10 16:00:30 317
原创 uva11401(数学基础题)
题目的大意是:现在有1...n总共n个不同的数字,从里面任选三个作为三边长,能构成三角形的个数一共有多少个。 解答:设c(x)是最长边为x时的三角形个数,那么要求的答案就等于c(1) + c(2) + ...... + c(x),所以主要需要解决的是c(x),又设三边长分别为x,y,z,由x-y 1.当y = 1时,z有0个解; 2.当y = 2时,z有1个解; ....
2015-06-10 15:38:13 354
原创 poj1159(dp,最长公共子序列)
题目的大概意思就是给你一个字符串,然后可以往字符串里面插入字符,要计算出至少插入多少个字符,可以让它形成一个回文串。 做法就是生成一个新串,该新串是原串的逆序串,然后求两个串的最长公共子序列就好。 动归方程: dp[i][j] = max( dp[i-1][j], dp[i][j-1], dp[i-1][j-1] + ( s1[i] == s2[j] ? 1 : 0 ) );
2015-06-09 16:44:46 382
原创 poj2533(LIS)
没什么说的,纯裸的LIS,到是二分的感受更明白了点。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #include #include #include #include #include using namespace std;#define MAXM 1#defin
2015-06-09 15:56:52 272
原创 poj(1260,动归)
做得最无语的一道题目。 题目的大概意思是你的采购单上需要n多级别的宝石,然后每购买一级的宝石,需要额外支付10个该等级宝石的钱,然后可以用更高等级的宝石代替低级别的宝石。 动归方程是f[i]表示前i等级所需的最低钱数为,那么动归方程是(a[i]表示第i级别需要的个数,p[i]表示第i级别宝石单价): f[i] = min(f[i], f[j] + ( a[j+1] +
2015-06-09 15:39:06 286
原创 poj3414(BFS)
就是一个很简单的BFS的题目,搜索出状态,看能否得目标状态,就是有六种操作,每种都记一下就好了。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #include #include #include #include #include using namespace s
2015-06-08 15:58:54 240
原创 poj2513(trie树+欧拉路+并查集)
题目的大意就是一根木棍两端涂上颜色,然后要把所有的木棍连成一根木棍,然后两根木棍能合并的前提是,连在一起的两端是同样一种颜色,然后这个额就很好理解,是一边画问题,求是否有欧拉路出现就好。 无向图有欧拉路的条件: 1.有0个或者2个点的度数为奇数。 2.图是一个连通图。 然后判断图连通,就是运用并查集的方法,每次合并一条边的两个顶点,最终一个连通图会合并成一个顶点,一
2015-06-05 09:50:31 338
原创 poj3274(数的哈希)
特别好的一个题目,题目的大概意思是,每头牛都有一定的属性值,然后把这个属性值转化为一个二进制数,从右到左分别呢标号为1,2...N,如果某一位上为1,那么它就具有这个属性。现在定义一个区间是“balanced”,当它满足区间内每个属性出现的次数相同,要求这样的区间的最大长度。 分析:令sum[i][j]代表前i头牛j属性的个数和,那么balanced的区间(i,j)就满足 su
2015-06-04 11:09:01 284
转载 POJ题目分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:
2015-06-04 08:45:36 372
原创 poj3349(数的哈希)
处理方式有好多种,算和,平方和,与,或之类的,我自己算的是个简单的,算和。主要是处理冲突,然后判断是否会出现相同的,可以顺时针,也可能是逆时针的。 但是自己过的很耗时,估计应该是开辟空间之类的造成的,还得好好研究一下。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #inclu
2015-06-03 16:51:20 391
原创 poj2299(求逆序对,归并排序)
归并排序求逆序对了,只要是逆序对的,肯定就会有交换的操作了,然后归并排序的时候,此时新数组放右边的数字时,计算逆序对个数(就是还未放入的个数),然后就可以得到答案了。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #include #include #include #inclu
2015-06-03 11:19:31 402
原创 poj1936(简单题,串)
本质就是一个简单的贪心匹配了,在第二个串中顺着找第一个串的每个字符就可以了。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #include #include #include #include #include using namespace std;#define M
2015-06-02 19:54:49 378
原创 poj3080(简单题,串)
思路是二分长度(并没有太大的作用),然后kmp匹配,然后找出最大的串,如果有多个的话,要找出字典序最小的那个。 PS:这种找段落的,注意控制循环结束的条件。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #include #include #include #include
2015-06-02 17:48:21 336
原创 poj1035(简单题,串)
一个简单题,先看字典中是否存在该传,如果不存在,就跟字典中字符串的长度比较,长度的绝对差大于1时,必定不是候选的答案串,长度相等时,看是否只有一个字符错误;长度不等时,看是否可以通过较长串删除一个字符得到较短串。 #include "stdio.h"#include "string.h"#include "math.h"#include #include #include #in
2015-06-02 16:41:01 339
原创 poj3020(二分图的最大匹配)
典型的二分图最大匹配的问题: 具体而言就是对里面的点分做两类,一类是横纵坐标之和是奇数的点,一类是横纵坐标之和是偶数点,只有这两类的点才能匹配,建边的原则是看它的四个方向和它本身是否是'*'号,然后答案就是所有为'*'的点减去最大匹配的值。 #include "stdio.h"#include "string.h"#include "math.h"#include #inclu
2015-06-02 15:03:25 245
原创 poj1094(拓扑排序)
好吧,这个题目的题意对于英语弱渣的我来说,略难懂,实际就是,每次读入一个信息,然后判断现在是否出现有环,或者出现唯一的拓扑序列,如果直到最后一条信息读完,都没出现前面两种情况,就说没有无法决定的拓扑序列。 wa了一发,主要原因是应该先判断是否有环,然后再来判断序列不唯一。 思路:就是每读入一条信息,就进行一次拓扑排序,得出结果。 #include "std
2015-06-01 16:05:36 287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人