04 2012 档案
摘要:呃,对自己表示很无奈,明明很清晰地一道题,愣是用了好长时间才做出来,不是没思路,是没整理好思路,没法写代码,好吧,以后要加强!题目大意:所有对4取余余一的数都为H-numbers,只有1和它本身两个因子的H-numbers数为H-primes,有两个H_primes的乘机组成的H_numbers称为H-composites,题目是给你一个数,让你求1到H的所有H-composites。方法很简单,就是筛选法,但是还有一种情况就是,不是完全有两个H_primes组成的数,这种情况要去掉。具体看代码吧。代码:#include <stdio.h>#include <stdlib.h
阅读全文
摘要:恩,这题做的郁闷,其实就是一道素数筛选加上大数拆分的题,但做的我万分无奈,提交几次都是RE,但把几个关键数组开大了,还是不行,看看网上的解题报告思路没错啊,最后的最后终于找出来了,原来是筛选素数的数组开小了,==!以后一定要细心啊!!代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define maxx 1000010//这里开小了~~int p[80000];int a[maxx+10];int num;int s[100];void init(){ int i,j; memset(a
阅读全文
摘要:类似于1961题,不过比1961要简单,只是让求最长的前缀,要注意它要求输入"."时表示输入结束。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int next[1000005];char str[1000005];void init(){ int i,j; i=0;j=-1; next[0]=-1; while(str[i]!='\0') { if(j == -1 || str[i] == str[j]) { i++;j++; ...
阅读全文
摘要:一道KMP的题,题目大意是:给你一串字符s,求其前n位重复的次数大于一的所有子串。比如aaa,前两位是aa,所以重复的次数为2,前三位aaa重复的次数为3。这题主要考察KMP算法中的next数组的灵活使用,next函数看过KMP的都知道,他是通过一个串的自匹配求出来的,next[i]一般认为是串s中前i个与后i个字符相等,并且这个i是满足条件的最大的。而通过求next的方法我们轻而易举的知道最大位移length=len(s)-next[len],所以要求前n位的最大重复字串,只要求出next数组就行了。由于本人刚刚看懂KMP的next数组原理,所以本题做起来还是感到有点吃力,呵呵,继续研究KM
阅读全文
摘要:题目大意是:给你几个DNA序列,让你找到最长的公共子序列。这题的数据量不大,可以用暴搜,就是用到了一个字符串处理函数strstr,它是查找子串在字符串中的位子的,返回值为子串首字母的下标。记下这题留待以后参考.代码:#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){ int n,m,i,j,k,sum; char str[14][65]; char s[65],st[65]; scanf("%d",&n); while(n--) { scanf (
阅读全文
摘要:题目很简单,就是给你一个n*m的矩阵,让你求从左下角到右上角的所有路径,简单的组合数学,直接求C(n+m,m)=C(n+m,n)就可以了,只不过,在数据范围上有些需要注意的,如果直接用int型会数据溢出,所以用long long和double型的。提交的时候,TLE了好几次,不知道哪地方错的,后来又把原代码提交了一遍,竟然A了,而且只用了16ms,不知道是不是poj后台有问题。代码:#include <stdio.h>/*double f(double n,double m){ int i,j,s; if(m>n-m) m=n-m; j=1;s=1; for(i=...
阅读全文
摘要:题目大意是:给你两个数n和m,计算从n到m的所有数的二进制中,0的个数大于1的个数的数的个数。这题用组合数学比较简单,不过要小心,很容易超时的,我就悲哀的RE了两次。对于一个长度为Len的二进制(最高位为1),如何求出他的RoundNumbers呢(假设为用R(len)来表达),分为奇数和偶数两种情况1、奇数情况:在Len=2k+1的情况下,最高位为1,剩下2k位,至少需要k+1为0用C(m,n)表示排列组合数:从m个位置选出n个位置的方法R(len)=C(2k,k+1)+C(2k,k+2)+...+C(2k,2k).由于 A:C(2k,0)+C(2k,1)+...+C(2k,2k)=2^(2
阅读全文
摘要:最近在做模拟题,感觉自己编码能力太差了,想通过模拟题好好提高一下编码能力!这是一道简单的编码题,本以为可以很快就解决的,结果几乎花了我一上午的时间,失败啊~~~最后看了discuss里给的一组测试数据才把它给过了,唉,考虑问题不全面啊!!直接打表就行了~贴代码:#include<stdio.h>#include<string.h>#include<iostream>using namespace std;struct node{ int d; char mon[10];};node date[260] = {{1,"imix"},{2,&
阅读全文
摘要:又一道线段树的题~~很简单的一道题,用数组建树很容易理解线段树的内部结构~~题目大意:有N个人排队,给出他们想插队的位置和他们的标识,问最后的序列是怎样的。看代码吧:#include<stdio.h>#include<stdlib.h>#include<string.h>int f[1000005];int pos[200004],val[200004],s[200004];int n;void built(int t,int lc,int rc)//建树过程{ f[t]=rc-lc+1;//保存n前面有多少空位 if(lc==rc) return ; in
阅读全文
摘要:这是我做的的一道线段树题,虽然不完全是自己想出来的,但是收获依然很大,就从这道题开始我的线段树之旅吧!这道题的意思是:在一面墙上张贴宣传画,可以覆盖按照给定的张贴的顺序,求张贴完所有的画后能够看见几张画。由于题目中给出的数据范围很大,1~10000000,所以首先要离散化,然后在用线段树进行更新查找。贴代码:#include<stdio.h>#include<stdlib.h>#include<string.h>struct node//记录画的位置,以便对输入点进行排序{ int x; int num;}s[20004];struct tree//建线段树
阅读全文