自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(457)
  • 收藏
  • 关注

原创 索引—算法竞赛

die10110 - Light, more light550 - Multiplying by Rotation568 - Just the Facts408 - Uniform Generator350 - Pseudo-Random Numbers10061 - How many zero's and how many digits ?10392 - Factor

2014-08-14 08:42:11 527

原创 索引- 基础题目选解

UVA10815

2014-08-09 16:33:45 538

原创 hdu5273(区间DP)

题意:给出一个区间,问这个区间逆序对有几对;思路:[l, r]的逆序对就等于[l + 1, r] + [l, r- 1] - [l + 1, r - 1]如果l 和 r也构成逆序对,就再加一;#include #include const int N = 1005;int dp[N][N], num[N];int main() { memset(dp,

2015-08-24 19:42:08 768

原创 hdu5339(暴力)

题意:给出一个a,还有n个数字;然后从n个数字中选出r个排列;要求a % c1 % c2 % c3......%cr = 0;问最少选几个;思路:首先取余肯定要先取余大的,因为取余完小的,再取余大的,肯定等于本身;所先先从大到小排序;才20,暴搜;#include #include #include using namespace std;

2015-08-24 09:44:25 497

原创 hdu5365(几何)

题意:给出n个整数点坐标,问构成正多边形的方法有几种;思路:因为整数点能构成的正多边形只有正四边形;所以四层for判断正四边形就行;#include #include int x[25], y[25];int square(int x){ return x * x;}int dis(int a, int b){ return squ

2015-08-23 20:59:59 496

原创 hdu5366(DP)

题意:在1*n的格子上放木人,两个木人之间间隔至少为2;问至少放个一个木人的情况有几种;思路:DP[i]表示长度为i的方法;如果不在第i个位置放,那么有DP[i - 1]种方法;如果在i这个位置放,那么有DP[i - 3]  +1种方法;所以DP[i] = DP[i - 1] + 1 + DP[i - 3]#include #include

2015-08-23 19:56:27 422

原创 hdu5419(期望)

题意:给出n个点,以及每个点的价值;然后给出m个区间,从中任意选三个不同的区间;然后选三个左边界中的最大值和右边界中的最小值,构成一个区间;问这个区间内的点价值的期望值;思路:我们来算算每一点被包含的情况有哪些,然后乘以这个点的价值,取和后除以所以情况就是答案;首先我们要按左边届排序;要算x这个点被覆盖的情况;那选的三个区间的左边界,就都要小于等于x,右边界都要

2015-08-23 18:49:47 564

原创 hdu5135(状态压缩DP)

题意:给出n根木棍,随意组成几个三角形,问组合的面积最大是多少;思路:用状态压缩,首先把可以组成的三角形的合法情况全都放进vector里,然后枚举;#include #include #include #include #include using namespace std;int s[12], n;double dp[1<<12];vector

2015-08-22 15:09:49 709

原创 hdu5319(求素数+威尔逊定理)

题意:这题就是求 (n-1)!modn(n−1)!  mod  n如果nn为合数,显然答案为0.如果nn为素数,那么由威尔逊定理可得答案为 n-1n−1注意有个trick为 nn = 4.

2015-08-21 15:17:28 590

原创 hdu5402(构造;)

题意:给出一张图,每个点上都有一个非负的数值;要求从左上角走到右下角,走过的点不能再走,得到的最大数值是多少,并输出路线;思路:首先,如果是奇数行,或者奇数列,就很简单,迂回着走就能全部走完;现在我们要判断偶数行偶数列的情况;经过找规律,我们发现,可以在不走某一个点的情况下,完成;也就是我们可以得到所有数值,减掉这个点的数值;而可以不走的点要满足(i + j)%

2015-08-20 09:02:48 396

原创 hdu5399(计数)

题意:有n个数字,并给出m个函数变化;如果给出的函数变化是-1,代表这个函数不确定,可以任意写;问使f1(f2(......fm(i))) = i;成立的所有情况有几种;思路:现将确定的函数模拟一边;得到的值如果有重复映射,则0种可能,因为一旦又重复映射,我们就不能映射出1到n所有的值;然后看不确定的函数个数;只需要留一个用来做调整,剩下的都是1到n的全排列

2015-08-19 15:13:42 357

原创 hdu5396(区间DP)

题意:给出n个数字,和n-1个操作符('+', '-', '*');然后每次选一个操作符,算完把结果放进去,直到只有一个数字;For example, a possible sequence of operations for "1+4∗6−8∗3" is 1+4∗6−8∗3→1+4∗(−2)∗3→1+(−8)∗3→(−7)∗3→−21. 问所有的选择方法得

2015-08-19 10:55:50 377

原创 hdu5400(计数)

题意:给出一个序列;问有几个子区间,满足可以分两段,前一段差d1,后一段差d2;思路:找出所有满足的大区间,这个区间里所有的子区间全部满足;#include #include const int N = 100005;int a[N], n, d1, d2;int main() { while (scanf("%d%d%d", &n, &d1, &

2015-08-18 20:22:16 435

原创 uva11754(水题)

题意:给出a,b;求出a,b间的平方数;思路:a,b都开根;然后r-l-1就行了;但是要判断a是不是刚好可以开根,不行的话l要加1;#include #include int a, b;int main() { while(scanf("%d%d", &a, &b) && a + b) { int l = sqrt(a); int r =

2015-08-11 21:10:42 869 1

原创 uva11752(合数)

题意:如果一个数可以表示成两个或以上的数的幂,就是超级幂;例如64 = 8^2 = 4^3;求1到2^64-1所有的的超级幂;题目没有输入;思路:所有数的合数(不是素数就是合数)次幂,都是超级幂;所以求所有每个数的合数次幂;要注意溢出的边界,和判重;#include #include #include #include using names

2015-08-11 20:22:37 983

原创 uva10943(球放盒子问题)

题意:给出N,K;问由K个数字相加得到N的方法有几种;思路:问题可以转化成有N个小球放进K个和盒子有几种方法;#include #include const int MOD = 1000000;const int N = 105;int c[2*N][2*N], n, k;void getC(int n) { memset(c, 0, sizeof(c)

2015-08-11 19:06:03 503

原创 uva11889(GCD,LCM)

题意:LCM(A,B) = C;已知A,C,求最小的B;思路:设X为GCD(A,B);那么C = A * B / X;所以我们先C/A 然后通过乘以公约数,乘回来:#include #include #include using namespace std;int A, B, C;int main() { int t; scanf("%d

2015-08-11 14:18:42 453

原创 uva11388(水题)

题意:给出 G, L;求两个数字最大公约数为G,最小公倍数为L;多组求最小的;思路:因为最大公约数和最小公倍数肯定是倍数;所以如果G,L不成倍数就误解;否则答案就是G,L;#include #include #include using namespace std;#define ll long longll G, L;int main

2015-08-11 10:14:05 509

原创 uvalive5009(三分)

题意:给出n个二次方程ax^2 + bx + c的a,b,c;然后要求一个x,使x代入所有方程的解的最大值最小;思路:因为这个这个值的变化是一个抛物线,所以不能二分,要用三分;#include #include #include #include using namespace std;const int N = 10005;int a[N], b

2015-08-11 09:37:11 410

原创 uva10341(解方程)

题意:给出一个方程,求解X;思路:因为方程是单调递减的,所以二分求解;#include #include #include #include using namespace std;double p, q, r, s, t, u;double solve(double a) { return p * exp(-a) + q * sin(a) + r

2015-08-11 08:53:49 751

原创 uva11542(高斯消元)

题意:给定一些数字,保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为完全平方数,问有几种选法思路:对每个数字分解成质因子后,发现如果要是完全平方数,选出来的数字的每个质因子个数都必然要是偶数,这样每个质因子可以列出一个异或的方程,如果数字包含质因子,就是有这个未知数,然后进行高斯消元,求出自由变量的个数,每个自由变量可以选或不选,这样的情况就是(2^个数),然后在

2015-08-03 11:18:30 1060

原创 uva10828(高斯消元)

题意:从每个结点出发到每个后继结点的概率均相等;当执行完一个没有后继结点后,整个过程停止;程序从编号为1的结点开始执行;你的任务是对于若干个查询点,求出每个结点的期望执行次数;思路:本来以为又是一个求普通求期望的题,像之前一样迭代求解就行了;后来发现有无穷大的解,看了大白,发现要高斯消元;线性代数又忘得很厉害了;代码基本照着敲的;#include

2015-08-02 21:23:03 669

原创 uva1386(矩阵快速幂)

题意:一个细胞自动机,有n个格子,每个格子的取值为0~m-1。给定距离d,每次操作后每个格子的值将变为到它距离不超过d的所有格子在操作之前的值之和除以m的余数。思路:矩阵快速幂#include #include #define ll long longconst int N = 505;int n, M, D, K;struct Mat { ll

2015-07-31 16:35:56 630

原创 uva10870(矩阵快速幂)

题意:f(n) = a1 *f(n - 1) + a2 *f(n - 2) + a3 *f(n - 3) + … + ad* f(n - d),  n > d.求f(n)思路:矩阵快速幂#include#include#define ll long longstruct mat { ll g[15][15];}res, ori;ll n, d, m;mat mul(m

2015-07-31 09:48:53 724

原创 uva11077(数论)

题意:给定n,k求出有多少个包含元素[1-n]的序列,交换k次能得到一个[1,2,3...n]的序列思路:递推dp[i][j]表示i个元素需要j次,那么在新加一个元素的时候,添在最后面次数不变,其余位置都是次数+1,这是可以证明的,原序列中有几个循环,需要的次数就是所有循环长度-1的和,那么对于新加一个元素,加在最后就和自己形成一个循环,次数不变,其余位置都会加入其他循环中,次数+1,

2015-07-30 11:05:00 661

原创 uva10294(置换群)

题意:有n个珠子围成的环,有t种颜色可以染这些珠子;如果这个环可以旋转有几种办法;如果这个环可以旋转,且可以翻转,有几种办法;思路:大白上说的置换群;#include #include #define ll long longusing namespace std;const int N = 55;ll p[N];int n, t;int ma

2015-07-30 09:52:29 767

原创 uva11762(期望)

题意:给出一个n,随机选一个比n小的素数i,如果i能被n整除;n/=i;否则n=n;问n除到1的期望次数;思路:先打素数表;然后f[n] = 1/p f[a0] + 1/p f[a1].....+ 1其中p是小于n的素数个数,ai表示,如果这个素数能被n整除,ai = n/这个素数,否则ai = n;然后用这个公式递推就行了;#include #i

2015-07-28 18:08:42 533

原创 uva11428(数论+二分)

题意:给出n,求n=x^3 - y^3 的最小的(x,y);思路:一直想要推出公式,或者找到规律,后来看了题解,原来数论有时候也是要靠枚举的,虽然是二分枚举;首先我们第一步把这个式子分解一下x^3 - y^3 = (x-y)(x^2 + xy + y^2);因为n 因为x>y,所以(x^2 + xy + y^2) > 3y^3;所以y的范围是0到60;

2015-07-28 14:49:51 403

原创 uva11427(数学概率与期望)

题意:小明每晚都玩游戏,每一盘赢的概率都是p,如果第一盘就赢了,那么就去睡觉;否则继续玩,玩到赢的比例大于p才去睡;如果一直玩了n盘还没完成,就再也不玩了;问他玩游戏天数的期望;思路:和之前的麻球那题一样,每一晚都是独立的;所以我们先求一天,赢的比例一直不超过p的概率;如果求出一天就这样的概率是s,那么期望天数就是1/s;#include

2015-07-28 10:11:41 623

原创 uva11722(概率)

题意:两个人到达车站的时间分别是t1-t2, s1-s2;并且到站后停留w分钟.问相遇的概率;思路:高中数学学过这个问题;首先是x轴取t1, t2,y轴取s1,s2画四条线,围出的矩形就是全集,即所有可能行;然后两个人要相遇,则到站时间只能相差w以内;所以画两条直线y = x + w ; y = x - w;两条直线在之前的矩形中,夹在中间的面积,就是相遇的可能;

2015-07-27 09:28:26 985

原创 uva11021(概率)

题意:一只麻球只能活一天,然后每天会生一次;给出n,k,m;n代表有一只麻球一次最多生n-1只;接下去n行分别是生0到n-1只的概率;k代表一开始有k只麻球;问m天后麻球死光的概率;思路:首先我们我们要先算一只麻球m天死光的概率,然后k次方;所以我们用f[i],表示一只麻球i天死光的概率;那么 f[i] = p0 + p1 * f(i - 1) + p2 *

2015-07-26 20:30:59 949

原创 uva10561(博弈)

题意:给出一个串,由X和.构成;我们可以在.的地方放X,谁先放出三个连续的X获胜;思路:首先,如果存在"XX"或者"X.X"那先手必胜;所以我们肯定不能下出这种情况;所以当一个位置有X时,那么它周围4个点就都不能放,一放就会出现上面的情况;所以可以以X来把整个游戏变成几个子游戏;就是分成几块安全的区域,然后求每块的sg值;然后有几种方式,就可以枚举所有可以放的点

2015-07-26 15:52:43 964

原创 uvalive(NIM博弈)

题意:给出有n堆石子;然后每次选一堆,取不能超过一半;谁不能取了,谁就输了;思路:标准NIM博弈题;不过还是ai 太大,我们不能求出所有sg值;所以先求小部分sg值;然后找规律;观察得出;sg(n) = n % 2 == 0 ? n/2 : sg(n/2);#include#include#define ll long longll SG(ll x){

2015-07-26 11:11:27 397

原创 uva11426(gcd + 欧拉函数)

题意:给出一个n,求 思路:设f(n)=gcd(1,n)+gcd(2,n)+……+gcd(n-1,n)。gcd(x,n)=i是n的约数(x而gcd(x,n)=i等价于gcd(x/i,n/i)=1,因此g(n,i)等价于p(n/i).p(x)为欧拉函数。#include #include

2015-07-26 10:34:53 589

原创 poj3018(欧拉路)

题意:给出一张图;要求走过的边不能再走;需要分几个队伍才能访问完,就是要画几笔;思路:算每个联通分量的奇点个数;每两个奇点,就需要一队人访问;所以每一个联通分量需要 奇点个数 / 2 的队伍;如果这个联通分量奇点个数为0,也需要一队;还有一个就是,如果是孤立点,就不需要,因为我们要访问所有的边,孤立点没有边.#include #include

2015-07-26 08:51:14 395

原创 uva1073(数论)

题意:一个边平行与坐标轴的多边形,可以通过描述角的方式来表示,R表示90度,O表示270度,现在给出序列的长度L,问可以构造出多少种不同的多边形,要求构造出来的多边形在内部有一点可以看到边界的每一个点(我的理解应该是凸多边形)。思路:首先确定是一个凸多边形,所以不可能有两个O相邻,并且在整个序列中,要有4个的RR(即两个R相连,用于转向),所以R的个数应该比O的个数多4,一个O再一个R等于

2015-07-25 10:08:22 443

原创 uva11361(数论DP)

题意:基本是看了大白上的思路,然后还参考了http://blog.csdn.net/lenleaves/article/details/9104417统计大于等于a,小于等于b,每一位之和可以被k整除,且本身也能被k整除的数的数量。用f(d,m1,m2)表示剩余d个数字,这d个数字之和模k为m1,这d个数字组成的整数倍k整除之后余m2, 这样的数字的数量,求

2015-07-25 08:36:32 1143 1

原创 poj3252(组合数学)

题意:给出一个范围,然后问这个范围内有几个是round number;round number也就是转化二进制后,0的个数大于等于1的个数;思路:这是一个组合计数的问题;我们拿一个二进制长度为10的数举例子;如果长度为10;那么所有长度为10以下的数字,肯定都是在范围内的,那么我们就要找出所有符合条件的数;首先9位的,那么需要的0的个数是5个以上;那么长度为9的,出

2015-07-24 14:37:21 459

原创 uvalive3516(DP)

题意:给出一种遍历多叉树的方式,就是总是向左,左走不同往回走,然后向右,遍历完整棵树,并回到原点;图上五棵树的遍历结果都是ABABABA;现在给出一个字符串,问能表示几棵树;思路:首先如果我们要算一个字符串ABABABA的组成树的数量,我们可以通过计算它的子树,即组成AB的棵树乘以组成ABABA的棵树,然后找到所有的组合方式加起来;那么就可用dp,因为要回到

2015-07-22 21:47:31 517

原创 uva11806(数论)

题意:要将k个棋子放到n*m的棋盘上,求要求第一行,第一列,最后一行,最后一列必须要有棋子,问有几种放法;思路:大体的思路就是求出所有的放法,然后减掉不符合的放法;所有的放法就是C(n*m, k) ;那么第一行没有的放法就是C((n-1) * m, k)那么我们一共就16种情况;第一行的状态,第一列的状态,最后一行的状态,最后一列的状态,4个状态一共16种组合,我们可以用状

2015-07-22 21:10:39 885 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除