随笔分类 -  HDOJ

上一页 1 2 3 4 5 6 7 8 9 10 ··· 24 下一页

发布一些HDOJ的做题情况以及代码。
hdu 1397
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1397题意:给一个偶数,求可以表示为多少对素数对的和。mark:最大范围是2^15 = 32768。打素数表,然后枚举。理论上会TLE,但是水过了。代码:# include <stdio.h>int IsPrime[40010] ;void init(){ int i, j ; for (i = 0 ; i <= 40000 ; i++) IsPrime[i] = 1 ; for (i = 2 ; i <= 200 ; i++) if (IsPrime[i]) ... 阅读全文

posted @ 2012-02-14 15:46 Seraph2012 阅读(206) 评论(0) 推荐(0)

hdu 1297
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1297题意:n个字母,由F和M组成。F不能单独存在。求满足条件的字符串数目。mark:递推很容易得到方程dp[n] = 2*dp[n-1]-dp[n-2]+dp[n-3]。但是题目中n最大是1000,结果是200多位的整数,要写成大数运算,大数减法没写过。。。方程可等价为dp[n] = dp[n-1]+dp[n-2]+dp[n-4],这样就回避了减法的问题。代码:# include <stdio.h># include <string.h>char ans[1010][300] 阅读全文

posted @ 2012-02-14 00:00 Seraph2012 阅读(220) 评论(0) 推荐(0)

hdu 1113
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1113题意:给一堆单词做字典,XXXXXX结束。然后给若干个单词,输出它和字典里哪些单词由同样的字母(个数也相同)组成,有多组的话按字典序输出。XXXXXX结束。mark:题意有点绕。。。思路是先把字典里的单词排序,并且每个单词计算一个值val。这个val是把单词的字母排序以后hash得到的,范围是26^6也就是3亿多一点,可以用int来表示。这样接下来每个单词输入的时候,只要比对字典里的val,相同则可以输出。不hash的话就多存一个字母排序以后的单词也可以。代码:# include <stdi 阅读全文

posted @ 2012-02-03 01:11 Seraph2012 阅读(387) 评论(0) 推荐(0)

hdu 1141
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1141题意:atmel公司1960年发布4bits的处理器,每10年翻一番。给一个年份,问最近一次发布的处理器能运算的n!最大的n是多少。mark:最大的处理器位数是2160年的4194304bits。要算n!的二进制表示位,直接算很难,可以变成求log2后取整加1。然后因为log2(n!) = log2(1) + log2(2)...+log2(n),所以直接O(n)就可以了。大概算到30w可以把500wbits的算出来,之后按输入二分。代码:# include <stdio.h># in 阅读全文

posted @ 2012-02-03 00:33 Seraph2012 阅读(188) 评论(0) 推荐(0)

hdu 1212
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1212题意:求一个数(大数)对另一个数(小数)的模。mark:大数除法求模,简单。代码:# include <stdio.h>int n ;char str[1010] ;int calc(){ int i, cc = 0 ; for (i = 0 ; str[i] ; i++) { cc = cc * 10 + str[i] - '0' ; cc %= n ; } return cc ;}int main (){ while (~scan... 阅读全文

posted @ 2012-02-02 23:31 Seraph2012 阅读(150) 评论(0) 推荐(0)

hdu 1702
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1702题意:告诉你FIFO或FILO(先进先出、先进后出),然后对每次操作进行模拟,输出结果。mark:栈和队列的模拟。。。代码:# include <stdio.h>int n ;int dp[1010] ;void Queue(){ int front = 0, rear = 0, num ; char str[20] ; while (n--) { gets (str) ; if (str[0] == 'I'){ sscan... 阅读全文

posted @ 2012-02-02 23:26 Seraph2012 阅读(236) 评论(0) 推荐(0)

hdu 2059
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=2059题意:中文。mark:题意有点绕。关键是算出乌龟的最短到达时间。方法就是dp了,每个站到达的最短时间是之前所有站直接转移过来的时间里最少的那个。1wa,错在double和int的转换上。。。2b了。代码:# include <stdio.h>int p[110] ;double dp[110] ;int n, vt1, vt2, c, t, L ;double min(double a, double b){return a<b?a:b;}double w(double s, d 阅读全文

posted @ 2012-02-02 23:12 Seraph2012 阅读(500) 评论(0) 推荐(0)

hdu 2175
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=2175题意:中文。mark:递归算一下就可以了。n个盘子前2^(n-1)-1次是移动n-1个盘子的操作,第2^(n-1)是移动最大那个盘子,后面又是n-1个盘子的操作。代码:# include <stdio.h>long long dfs(long long n, long long m){ long long mid = (1LL<<(n-1)) ; if (m == mid) return n ; if (m < mid) return dfs(n-1,m) ; ret 阅读全文

posted @ 2012-02-02 12:29 Seraph2012 阅读(152) 评论(0) 推荐(0)

hdu 2137
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=2137题意:把一个字符串(奇数个字符)按中间字符为轴逆时针旋转n次后,输出。mark:2WA,n居然可以为负。。。代码:# include <stdio.h># include <string.h>void out0(char str[], int len){puts (str) ;}void out1(char str[], int len){ int i, j ; for (i = len-1 ; i >=0 ; i--) { for (j = 0 ; j < i 阅读全文

posted @ 2012-02-02 12:18 Seraph2012 阅读(181) 评论(0) 推荐(0)

hdu 2136
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=2136题意:问一个数n最大的素因子是第几个素数。mark:之前一直TLE。素数表不打好会TLE,分解素因子的时候不加sqrt优化也会TLE。。。先打好100w的素数表,把素数的位序标记好,然后从1到sqrt(n)分解n,得到n最大的素因子后,再看是第几个。代码:# include <stdio.h># include <math.h>int IsPrime[1000010] ;int Primes[1000010] ;int cnt = 0 ;void init(){ int i 阅读全文

posted @ 2012-02-02 11:54 Seraph2012 阅读(328) 评论(0) 推荐(0)

hdu 2065
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=2065题意:中文。mark:很多人说是指数型母函数,的确指数型母函数可秒,但是出题者的意图更可能是考察递推+矩阵乘法。按状态,长度为n的时候:D[1,n]表示偶数个A、偶数个C的情况数,D[2,n]表示偶数个A、奇数个C的情况数,D[3,n]表示奇数个A、偶数个C的情况数,D[4,n]表示奇数个A、奇数个C的情况数。有长度为n的时候情况可由长度为n-1的情况推来:(D[1,n],D[2,n],D[3,n],D[4,n])*M=(D[1,n+1],D[2,n+1],D[3,n+1],D[4,n+1])。其 阅读全文

posted @ 2012-01-26 21:56 Seraph2012 阅读(606) 评论(0) 推荐(0)

hdu 2133
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=2133题意:输入一个日期,输出不合法(illegal)或星期几。mark:直接计算该日期和0年1月1日(周六)天数差,然后模7就好,注意闰年还有合法性判断要包括0月和0日的情况。代码:# include <stdio.h>int mon[2][13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ... 阅读全文

posted @ 2012-01-22 06:13 Seraph2012 阅读(377) 评论(0) 推荐(0)

hdu 1254
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1254题意:中文。mark:BFS+DFS。用BFS来展开箱子的位置和小人的位置,每个节点有2个属性,1是箱子所在位置的坐标,二是一个hash值来表示小人能位于箱子上下左右四个地方的情况(每个方向能否到达用1位来表示,共需要用15)。计算hash值的时候用DFS来穷举小人所有能到达的位置。wa了1次,DFS的时候忘记考虑小人不能穿过箱子的情况。代码:# include <stdio.h># include <string.h>int graph[10][10] ;int n, m 阅读全文

posted @ 2012-01-22 05:54 Seraph2012 阅读(222) 评论(0) 推荐(0)

hdu 1728
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1728题意:中文。mark:我真是弱爆了。总体思路就是BFS,只不过不是用步数来限制,而是用转弯次数。注意坐标是先纵后横。。。先拍了个DFS,理所当然地TLE了。然后拍了个BFS,其实没想清楚就拍了,结果还TLE。想了半天,BFS没理由TLE啊。然后放了2天,今天想清楚了很多细节,又拍了一个BFS,又TLE了。后来发现是加点至队列的时候,如果一个方向上的某点之前已经访问过,则不加入队列这里,直接写了continue,忘记让x和y坐标变到下一个点去了。。。代码:# include <stdio.h& 阅读全文

posted @ 2012-01-21 15:11 Seraph2012 阅读(555) 评论(0) 推荐(0)

hdu 1180
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1180题意:中文。mark:题目没说明楼梯改变情况。sample中的路径应该是先向上走,再向右走,通过楼梯后走到头再向上,这里wa了1次。bfs+优先队列。优先队列用手写堆实现。数据规模很小。代码:# include <stdio.h># include <string.h>char graph[25][25] ;int dr[4][2] = {0,1,0,-1,1,0,-1,0} ;int sx, sy, ex, ey ;int vis[25][25] ;int q[25*25 阅读全文

posted @ 2012-01-20 04:52 Seraph2012 阅读(290) 评论(0) 推荐(0)

hdu 1026
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1026题意:n*m迷宫,求从(0,0)到(n-1,m-1)的最少时间。'X'是墙,'.'是空地,'1'-'9'表示有怪物,消灭之需要数字对应的时间。mark:最近一直在写搜索题。搜索题有的很费劲,但是写多也就觉得嗯,就那么回事。这题也没啥可说的,直接BFS。和最简单的BFS不同的是,判断一个过去到过的点是否可走,需要多开一个数组来记录,然后判断过去到达的时间和现在到达的时间的大小。(其实最好的方法是优先队列么。。。懒得写而已。)然后因为要求 阅读全文

posted @ 2012-01-17 05:28 Seraph2012 阅读(1077) 评论(0) 推荐(0)

hdu 1418
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1418题意:中文。mark:1wa。虽然n、m都是整形范围,但是加起来可能会超过,因此要用long long。不存在m < 2的情况。代码:# include <stdio.h>int main (){ long long n, m ; while (~scanf ("%I64d%I64d", &n, &m) && (n||m)) printf ("%I64d\n", n+m-2) ; return 0 ;} 阅读全文

posted @ 2012-01-13 23:31 Seraph2012 阅读(122) 评论(0) 推荐(0)

hdu 1562
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1562题意:求最小的[1000,9999]区间内的数x满足x%a==0 && (x+1)%b==0 && (x+2)%c==0。mark:应该是用剩余定理的,不过数据那么小,直接爆了。代码:# include <stdio.h>int main (){ int T, a, b, c, i ; scanf ("%d", &T) ; while (T--) { scanf ("%d%d%d", &a, &am 阅读全文

posted @ 2012-01-13 23:21 Seraph2012 阅读(125) 评论(0) 推荐(0)

hdu 1999
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1999题意:中文。mark:打表到100w。。。(上限是试出来的。。。)代码:# include <stdio.h>int sum[1000010] ;int dp[1010] ;void init(){ int i, j ; for (i = 1 ; i <= 500000 ; i++) for (j = 2*i ; j <= 1000000 ; j+= i) sum[j] += i ; for (i = 2 ; i <= 1000000 ; i+... 阅读全文

posted @ 2012-01-13 22:28 Seraph2012 阅读(182) 评论(0) 推荐(0)

hdu 1088
摘要:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1088题意:写一个html代码显示的程序。。。mark:就是麻烦,没别的。各种PE。后来发现是只考虑了' '和'\n',忘记考虑'\t'。。。代码:# include <stdio.h>int main (){ int ch, cnt = 0, cc = 0 ; int flag = 0, end = 1 ; int i ; char buff[100] ;// freopen ("in.txt", "r" 阅读全文

posted @ 2012-01-13 21:20 Seraph2012 阅读(163) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 9 10 ··· 24 下一页