上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 51 下一页
摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1395题意:给出n,求满足2^x mod n = 1的最小的x。mark:数论题,其实就是求a模m的阶。打素数表敲错变量,1wa。可以水过,但是最好需要知道以下知识。1. 若gcd(a,m)==1,一定存在一个正整数d<m使得a^d == 1 mod m(欧拉定理)。2. 满足条件的最小正整数d记为ord_m(a),叫做a模m的阶。3. 若对于一个正整数a满足(1)gcd(a,m)==1;(2)ord_m(a)==φ(m)(φ(m)表示m的欧拉函数);则a叫做m的一个原根。4. 若gcd(a,m) 阅读全文
posted @ 2012-02-15 06:49 Seraph2012 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 地址:http://acm.hdu.edu.cn/showproblem.php?pid=1564题意:从一个n*n的棋盘的某个角落开始,走过的格子不能再走,每次轮流移动棋子(上下左右),最后无法移动的人输。问是否有先手必胜的策略。mark:打表后看出规律。证明不会。代码:main(n){while(scanf("%d",&n),n)puts(n&1?"ailyanlu":"8600");}打表程序:# include <stdio.h>int n ;int graph[1010][1010] ;int d 阅读全文
posted @ 2012-02-15 00:52 Seraph2012 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(491) 评论(0) 推荐(0) 编辑
摘要: 地址: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 阅读(149) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 51 下一页