自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

那些年

在慢慢爬的程序员

  • 博客(62)
  • 资源 (3)
  • 收藏
  • 关注

原创 UVA 10910 Marks Distribution

题意:参考了大神的点击打开链接#include #include #include using namespace std;int n,t,p,m;long long C(int a ,int b){ if(b-a < a) a=b-a; long long ans=1; for(int i = 1; i <= a; i++)

2013-10-31 23:08:27 794

原创 UVA 11069 A Graph Problem

题意:加入集合的条件是:1.任意两个数不相连,2.在满足1个条件下不能再将之前组成的集合加入新的元素。看了题解明白的意思,既然不能在已有的基础的上再加,所以我们每次都加能加了,所以对于已经选到n,只能加n+2,或者n+3,就行了,不用考虑n+4,那是n+2的事情,为了能够递推出答案,所以f(n)=f(n-2)+f(n-3)#include #include #include using

2013-10-31 18:16:44 780

原创 UVA 10918 Tri Tiling

题意:求几种方法构建成3*n的矩形,小的矩形只有1*2的,仿照uva 10359的思路f(n)=3*f(n-2)+2*f(n-4)...+2*f(2),递推出公式:f(n)=4*f(n-2)-f(n-4),当n是奇数的时候,f(n)=0#include #include #include using namespace std;const int MAXN = 100;int

2013-10-31 16:48:18 1055 1

原创 UVA 10519 !! Really Strange !!

题意:n个圆两两相交,将平面分成了几部分,假设已有n-1个圆,那么第n个圆将与前n-1个圆相交2*(n-1)个点,也就是2*(n-1)个弧,而一个弧将产生出一个新的部分,所以:f(n) = f(n-1) + 2*(n-1),推出公式:f(n) = n^2-n+2,大数,害我错了好几次的是:n=0时的特判#include #include #include #include #i

2013-10-31 00:21:35 726

原创 UVA 10359 Tiling

题意:求几种摆成2*n矩形的方法,可用的矩形有1*2,2*2的,对于摆到长度为n的情况有:1.在n-1的情况下,再放一个1*2,2.在n-2的情况下,放2个1*2,1个2*2的,大数#include #include #include #include #include using namespace std;const int MAXN = 300;int n,f[MAX

2013-10-30 21:06:05 732

原创 UVA 10940 Throwing cards away II

题意:写了几个发现规律f(n)=f(2^m+k)=2*k,注意f(1) = 1,为此W了一次#include #include #include #include using namespace std;int main(){ int n; while (scanf("%d",&n) != EOF && n){ if (n == 1){

2013-10-30 18:07:00 743

原创 UVA 10079 Pizza Cutting

题意:求几刀能将圆切成几份,画了一下,发现每次都增加的份数都是第几刀,所以公式就是1+n(n+1)/2#include #include using namespace std;long long n;int main(){ while (scanf("%lld",&n) != EOF){ if (n < 0) break;

2013-10-30 16:59:07 968

原创 UVA 991 Safe Salutations

题意:连接圆上的n对点,要求不要相交,Catalan数的应用,试想一下,如果任选一条的如果使得线的一边的点数是奇数的话,那么我们显然是无法成功的,所以我们选择一条线后,线的两边都要是偶数个,例如n=4的时候,我们可以选择(0对,3对),(1对,2对),(2对,2对),(3对,0对)#include #include #include #include using namespa

2013-10-30 14:57:35 776

原创 UVA 10236 The Fibonacci Primes

题意:打印在斐波那切数列中第n个素数,这题有要求的是只打印前九位的数字,也就是不会超过整型,所以用不到大数,然后在利用打印素数表的技巧就行了,超过9位的记得要处理#include #include #include #include using namespace std;const int limit = 1000000000;const int MAXN = 320005;

2013-10-29 21:25:43 925

原创 UVA - 763 Fibinary Numbers

题意: 将用斐波那切表示的二进制相加,题目说可能一个数可以有几种不同的表示形式,那么要求不存在两个相邻的1,至于二进制相加的时候有几个注意的地方,就是当ans[i]>=1的时候,如果ans[i-1]>=1的话,那么利用斐波那切的公式ans[i]=ans[i-1]+ans[i-2]处理使得不存在相邻的两个1,还有的就是当ans[i]>=2的时候,利用ans[i+1]=ans[i]+ans[i-1

2013-10-29 19:52:26 818

原创 UVA - 10229 Modular Fibonacci

题意:矩阵快速幂取模#include #include #include #include using namespace std;long long mod;long long p[]={1,1,1,0};void matrix(long long a[],long long b[],long long c[]){ long long q = a[0]*b[0]

2013-10-28 21:27:08 770

原创 UVA - 10334 Ray Through Glasses

题意:在n次的折射后一共有几条线,这里解释的很好点击打开链接#include #include #include #include using namespace std;const int MAXN = 1005;int n,f[MAXN][MAXN];void init(){ f[1][0] = 1; f[2][0] = 1; int a,c

2013-10-28 19:50:14 786

原创 UVA - 10862 Connect the Cable Wires

题意:看了大神的推理:点击打开链接然后得到公式f(n)=f(n-1)*3-f(n-2) (n>2),之后便是大数的计算#include #include #include using namespace std;const int MAXN = 2005;int len[MAXN],n;int f[MAXN][MAXN];void mul(int a,int b){

2013-10-28 14:21:08 841

原创 UVA 10518 How Many Calls?

题意:涉及到矩阵的快速幂取模,这里有一篇关于快速幂取模的文章点击打开链接,题目要求的是求函数F(n)计算的次数,然后输出f(n) MOD m的结果,很容易知道f(n)=f(n-1)+f(n-2)+1,然后又看了这篇分析点击打开链接#include #include #include #include using namespace std;struct node{

2013-10-27 23:46:39 800

原创 UVA 10303 How Many Trees?

题意:设f[i]表示一共有i个元素时二叉搜索树的个数,那么依次取1~n-1作为根节点,那么左右子树元素的个数就分别是(0,n-1),......,所以f[n] = f[0]*f[n-1]+f[1]*f[n-2]...+f[n-1]f[0],其实也就是Catalan数,高精度的计算,递推公式是f[n]=(4n-2)/(n+1)*f[n-1]#include #include #include

2013-10-25 00:42:42 751

原创 UVA 10183 How Many Fibs?

题意:求[a,b]之间的Fibonacci numbers,范围达到10^100,用到了高精度,然后测试了一下,到第500个的时候,长度就已经是105了,所以我们只要计算到第500个就行了,顺便复习了高精度#include #include #include #include #include using namespace std;char fib[550][170];vo

2013-10-24 11:09:01 721

原创 UVA 10417 Gift Exchanging

题意:对于概率很无解,参考:点击打开链接#include #include #include #include using namespace std;double p[20][20];int num[10];int N;double ans;void dfs(int cur,double cp){ if (cur == N){ ans += cp

2013-10-23 23:44:11 715

原创 UVA 11176 Winning Streak

题意:参考了大神的想法:点击打开链接用dp[i][j]表示前i场连续的W不超过j的概率,最后求dp[n][j]-dp[n][i-1]就行了,对于第i场比赛是w还是L,只要是第i场比赛的结果不会使得连续胜利场数超过j即可。那么我们从原概率中减去这种事件发生的概率即可【这种事件发生的概率是i次比赛的后面连续j+1场都获得了胜利,且再往前一场没有获得胜利】#include #i

2013-10-23 13:26:33 827

原创 UVA 10900 So you want to be a 2n-aire?

题意:参考这里点击打开链接#include#include#include#define MAXD 35int N;double T, q[MAXD];void solve(){ int i, j, k; double eq, f = 1, quit; f = q[N]; for(i = N - 1; i >= 0; i --) {

2013-10-22 23:23:32 1150

原创 uva 557 Burger

题意:求最后双胞胎拿到不同的汉堡的概率,竟然还有不知道到谁那停止抛硬币,参考了别人的想法,设想最后拿到不同的汉堡的情况,那么所有人都要抛硬币,假设前n-2个人都各取了不一样的汉堡(就是(n-2)/2一种,(n-2)/ 2一种),那么一共有C(n/2-1)(n-2)的情况,而这种情况的概率是2^(n-2),然后为了不每次计算,推出了公式:#include #include using

2013-10-22 20:29:19 1258 3

原创 UVA 11181 Probability|Given

题意: 求N个人在超市购物,其中r购物,其他人不购物,求第i个人有购物的概率,先DFS求出N个人r个人购物的概率,然后利用条件概率的公式:P=P(A*I)/P(A),求出每个人的概率#include #include #include #include #include using namespace std;const int MAXN = 30;int N,r,vis[

2013-10-21 21:23:38 701

原创 UVA 10169 Urn-ball Probabilities !

题意:起初有一个红球,然后每次取一个球,然后在放进一个白球,然后再取出一个球,取两次算一次概率,两次都取到红球的概率为pi,一共取了n次,问至少有一次两个搜是红球的概率是多少,还有每次都是红球的概率有几位0,至少的话,我们就求每次都没取到的概率,然后在1-P就是答案了,设每次都是红球的概率是P,那么设P=10^a,a=log10(P),a一定是分数,且小于0,那么a=b(整数部分)+c(小数部分)

2013-10-21 16:45:08 794

原创 CF World Football Cup

题意:求出晋级的队伍,并按字典序输出,排序要求是:1.按得分降序,2.按赢球和输球的差的降序,3,按赢的降序,麻烦的是储存数据#include #include #include #include #include using namespace std;const int MAXN = 200;char Map[MAXN][MAXN];struct node{ in

2013-10-21 15:54:31 815

原创 UVA 10277 Boastin' Red Socks

题意:已知p/q是连续取的两次红袜子的概率,因为p/q=a/b(a-1)/(b-1),枚举,排除是double型时的可能就可以了#include #include #include #include using namespace std;long gcd(long long a,long long b){ return b==0?a:gcd(b,a%b);}int

2013-10-21 15:51:24 738

原创 UVA 542 France '98

题意:求每个队伍夺冠的概率,用dp[i][j]表示前i轮j获胜的可能性,还有就是确保当前两个对手不是前

2013-10-21 14:21:59 977 2

原创 UVA 10759 Dice Throwing

题意:求扔出色子总数大于等于x的概率,递推求出dp[i][j]代表扔i个色子有总数是j的个数#include #include #include #include using namespace std;long long dp[25][160];void init(){ memset(dp,0,sizeof(dp)); dp[0][0] = 1;

2013-10-20 15:17:35 1062

原创 UVA - 10491 Cows and Cars

题意:这里有讲的很完整的点击打开链接#include #include #include using namespace std;int main(){ int cow,car,show,temp; while (scanf("%d%d%d",&cow,&car,&show) != EOF){ int temp = cow + car - 1;

2013-10-20 10:55:19 1049

原创 UVA - 10056 What is the Probability ?

题意:n个人轮流扔色子,知道有人赢了,赢的概率是p,求第k个人赢的概率,P(k)=p*(1-p)^k-1*(1+(1-p)^n+(1-p)^2n....)就是第一轮,第二轮...才赢的所有情况最后得到P(k)=(1-((1-p)^n)^N)(N->无穷)/(1-(1-p)^n)取极限得到:p*(1-p)^k-1/(1-(1-p)^n)注意p=0的时候,直接结果是0.0000#i

2013-10-20 10:08:46 805

原创 UVA - 11027 Palindromic Permutation

题意:觉得这里讲的不错 点击打开链接  ,详细看代码#include #include #include #include using namespace std;const int MAXN = 35;char str[MAXN],result[MAXN],cword;int vis[130],word[MAXN],cnt;long long n,F[MAXN],len;

2013-10-19 23:25:33 794

原创 UVA - 10375 Choose and divide

题意:求两个组合的商,利用数学阶乘的概念还是蛮简单的, m!C(m,n) = -------- n!(m-n)!例如这个,先找到n与(m-n)之间的较小值,然后式子就等于(p*...*(p-Min+1))/Max接下来就是简单的除法了#include #include #include #include using namespace std;

2013-10-19 19:55:29 929

原创 UVA - 10105 Polynomial Coefficients

题意:求多项式的系数,套用公式:由(a+b+...+z)^n某一项是a^k+b^d+...+f^z 的话,那么他的系数就是n!/(k!*...z!)#include #include #include using namespace std;const int MAXN = 50;int ans[MAXN],m,k,a;void init(){ ans[0] =

2013-10-19 11:54:37 825

原创 POJ - 2631 Roads in the North

题意:求树上最远的距离,两次的DFS就行了#include #include #include #include using namespace std;const int MAXN = 10110;struct node{ int to; int len; int next;}eg[2*MAXN];int head[MAXN];int idx,

2013-10-19 01:04:38 730

原创 UVA - 10308 Roads in the North

题意:在一棵二叉树里找最远的两个点的距离,题目的输入和树的构建的看了好久,每次将一个节点加进树里,DFS一次就可以了,因为他是二叉树,所以只要一次#include #include #include using namespace std;const int MAXN = 10100;long long ans = 0;int p[MAXN],next[MAXN];int

2013-10-18 21:24:43 1236

原创 UVA - 11029 Leading and Trailing

题意:求前三位,后三位,后三位我们可以用快速幂解决,至于前三位是这样来的,因为n^k = 10^(log10(n^k))=10^(k*log10(n)),对这个数取整的话,小数部分再*100就是前三位了,显然前三位只受k*log10(n)小数部分的影响,最后再取整,还有后三位不够三位用0补#include #include #include using namespace std;

2013-10-18 14:56:56 1176

原创 UVA - 571 Jugs

题意:通过三种操作是否能使B里面的水达到N,只有倒满和清空以及将A倒进B三种,数论的方法参考了别人的题解:传送口证明:当n从0到B-1变化时,r可以取到0到B-1之间的任何值,反正法:假设nA%B取值在0~B-1,当n从0到B-1变化时,r取不到0到B-1之间的任何值的话,证明存在n1!=n2的时候,r1==r2,现在再来证明:当n1!=n2时,r1!=r2,假设n1!=n2时,r1=

2013-10-18 13:35:19 767

原创 CodeForces - 251A Points on Line

题意:求出任意三个,其中这三个中最大的和最小的不超过d的组数,很巧的是这道题是从小到大输入的,其实对于一个数n,找到不大于n+d的最大的数,确定这两个之间的个数,然后以n作为第一个,然后在长度为l的任意找出2个,就是组合,二分求上界突然忘了,翻书就看到了这个函数upper_bound(),函数的返回值是小于等于n的最后一个元素的下一个,所以要-1#include #include #i

2013-10-17 23:43:13 1299 1

原创 CF k-Multiple Free Set

题意:看输出的意思是n和n*k是一类,求最多有几类,用了set,还有一种方法是二分,不然数据太大#include #include #include #include #include using namespace std;const int MAXN = 200005;long long arr[MAXN];int n,k;int main(){ whil

2013-10-17 22:08:08 893

原创 codeforces 302B. Eugeny and Play List

题意:求时间num是在第几首歌,看到这么大的数据,就用二分做,做不出来,二分实在是掌握的不好,然后就用搜索做#include #include #include using namespace std;const int MAXN = 100005;long long arr[MAXN],brr[MAXN],crr[MAXN];int n,m;int main(){

2013-10-17 20:18:57 1209

原创 UVA - 10820 Send a Table

题意:输入n,定义一个二元组(x,y),满足1#include #include #include #include using namespace std;const int MAXN = 50010;int n,vis[MAXN],arr[MAXN];void init(){ memset(vis,0,sizeof(vis)); vis[1] = 1;

2013-10-16 20:49:35 702

原创 UVA - 10717 Mint

题意:给你n种硬币厚度,m张桌子,让你求使得桌子平衡的数,一个要求输出不超过给定值的最大高度,一个是超过给定值的最小高度,其实就是求四个数的最小公倍数,利用公式lcm(a,b)=a*b/gcd(a,b),然后就是在枚举四种可能的同时找到最大和最小值,特殊的是当给定值恰好是最小公倍数的倍数时,最大最小值都是等于给定值#include #include #include #include

2013-10-16 14:03:49 739

Spring-AOP-JDK动态代理

Spring-AOP-利用java中的动态代理和Spring的拦截器做到AOP

2015-05-12

Spring核心学习IOC部分

Spring核心学习IOC部分:从最简单的BeanFactory开始一步步完善类似Spring的功能

2015-05-11

intellij idea 快捷键

intellij idea 常用的快捷键

2014-05-02

空空如也

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

TA关注的人

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