摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2048这是一道错排的变式,其实用错排(n!*(1/2!-1/3!+…..+(-1)^n/n!) )/全排(n!) 即是我们要求的百分率,如果要简单一点就可以直接用(1/2!-1/3!+…..+(-1)^n/n!),所以我们就可以很容易写出,还有精度问题,四舍五入,由于系统本身就是取的四舍五入,所以我们就可以不做处理了代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h&g 阅读全文
posted @ 2011-08-05 16:43 ○o尐懶錨o 阅读(455) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1465今天立神和我们讲了错排,才知道错排原来很简单,从第n个推起:当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法; 综上得到 M(n)= 阅读全文
posted @ 2011-08-05 16:00 ○o尐懶錨o 阅读(207) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1431run了好几次,当自己郁闷的时候突然看到了一句话,偶数位的回文串都可以被11整除当然要除了11,说明八位的数据可以全部忽略从9989899开始,这样问题就简单多了,减少了很多数的筛选与数组的空间,我们还可以先去除所有的偶数位的数再来筛选,这样可能更简单,看过还有打表的,真是佩服。。。#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>bool p[9989900] 阅读全文
posted @ 2011-08-04 22:09 ○o尐懶錨o 阅读(899) 评论(1) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2080这个题目是求角度,用向量的方法求的cosx,cosx等于向量之积除以向量的模的积,相信公式大家都会吧,然后用acos(cosx)就可以达到角度的大小,这道题还要注意精度代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#define PI 3.141592653int main(){ int n; double x1,x2,y1,y2,m,t; scanf 阅读全文
posted @ 2011-08-04 13:49 ○o尐懶錨o 阅读(787) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1339这是一道很简单的英文题,就是求2^p与一个o相乘等于n,这样看来o一定是一个奇数,所以我们只要不断除以2一定可以得到一个奇数,若n是一个奇数就直接把n和0输出就可以了代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int main(){ int t,n,c; scanf("%d",&t); while(t--) { c=0; 阅读全文
posted @ 2011-08-04 11:34 ○o尐懶錨o 阅读(260) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2069这道题一看就是母函数,于是就觉得它很简单,出现了错误的代码:#include<stdio.h>int main(){ int n; int i,j,k; int a[1000],b[1000],num[6]={0,1,5,10,25,50}; while(scanf("%d",&n)!=EOF) { for(i=0;i<=n;i++) { a[i]=1; b[i]=0; } for(i=2;i<=5;i++) { for(j=0;j<=n;j++ 阅读全文
posted @ 2011-08-04 10:05 ○o尐懶錨o 阅读(187) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1358几天看了kmp,觉得其实挺有趣的,可是当自己做题的时候才知道,它的用法是很灵活的,当计算重复子串的时候最好next的下标为-1开始,并且要注意数组的大小,因为数组开小了,所以一直wa。。。代码:#include <stdio.h>#include <string.h>#include <stdlib.h>char s[1000000];int len,next[1000000];int main(){ int t=0,a; while(scanf("%d&q 阅读全文
posted @ 2011-08-03 16:29 ○o尐懶錨o 阅读(246) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1711做了KMP,感觉有点不懂为什么要next函数,最后问了涛神,懂了,原来next是找出自己重复的子串,只要有重复的就直接移动过去就可以了,第一次做KMP一a,这是赤裸裸的模版的,水题#include <stdio.h>#include <string.h>#include <stdlib.h>int n,m;int a[1000002],b[1000002],next[1000002];void getnext(){ int i=1,j=0; next[1]=0; wh 阅读全文
posted @ 2011-08-03 16:26 ○o尐懶錨o 阅读(183) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3336hdu 3336 Count the string 【经典 KMP】+【DP】【题意】给你一个字符串,然后让你把所有的前缀给找出来,并把它们在字符串中的出现次数相加,输出这个和【分析】找出前缀后,算出现次数,很明显的是一个单模式串匹配问题,KMP 可以很好的解决,不过如果直接这样暴力的话,O(n^2) 的复杂度还是不行的。。。因此,我们试着考虑 KMP 算法进行快速匹配的本质核心所在,其实就是 next[] 数组而这个的本质其实就是 S[1..next[i]]=S[i-next[i]+1...i]即模式 阅读全文
posted @ 2011-08-03 16:22 ○o尐懶錨o 阅读(1165) 评论(0) 推荐(2) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2031今天下午翻到11页突然发现我的水题系列还有好多没有做,呵呵,一试手感还不错,只是一个小小的错误,wa。。。。本题就是利用assic码值,用字符串读出更方便吧,不过一改就对了,感觉真不错。。。#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){ int m,n,r,a[1000],k,flag; while(scanf("%d%d",&n,&m)!=EO 阅读全文
posted @ 2011-08-03 16:15 ○o尐懶錨o 阅读(661) 评论(0) 推荐(1) 编辑