2012年3月12日

HDOJ 1042 N!

摘要: 万位制,先计算10000!的位数,然后考虑分配多大的数组!Accepted 1984MS 240K 1 # include <stdio.h> 2 # include <memory.h> 3 4 # define N 8200 5 # define BASE 100000 6 7 int main() 8 { 9 int n, i, j;10 long long c, tmp;11 int a[N];12 13 freopen("in.txt", "r", stdin);14 freopen("out.txt" 阅读全文

posted @ 2012-03-12 01:14 getgoing 阅读(322) 评论(0) 推荐(0)

2012年3月11日

斯特林公式

摘要: 题目来源:HDOJ1018(求阶乘的位数)斯特林公式简介(维基百科):斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用,而且,即使在n很小的时候,斯特灵公式的取值已经十分准确。公式为:这就是说,对于足够大的整数n,这两个数互为近似值。当n增加时,(ln n!)与o (n ln n − n)之比趋于1。几乎超时: 1 # include <stdio.h> 2 # include <math.h> 3 4 int main() 5 { 6 int T, x, i; 7 double sum; 8 9... 阅读全文

posted @ 2012-03-11 23:43 getgoing 阅读(1339) 评论(0) 推荐(0)

优化:一个简单小题

摘要: 题目来源于HDOJ1013把一个正整数的各位数字之和加起来,如果得到一个个位数,就打印它,否则重复对和的各位数字相加,直到得到个位数,打印它;若输入为 0 则结束。这个题要处理比较大的数(字符串表示)放弃了在 while((ch=getchar() != EOF)) 下分情况讨论后(详情自己试),容易想到下面的方法: 1 # include <stdio.h> 2 3 int main() 4 { 5 char ch; 6 int ans; 7 8 while (ch=getchar() != '0') 9 {10 ans = (ch... 阅读全文

posted @ 2012-03-11 23:01 getgoing 阅读(226) 评论(0) 推荐(0)

2012年3月10日

[转载]zoj 分类

摘要: 转载自lonelycatcher的博客ZOJ POJ 题目分类初学者题:1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 1334 1337 1338 1350 1365 1382 1383 1394 1402 1405 1414 1494 1514 1622 1715 1730 1755 1760 1763 1796 1813 1879 1889 1904 1915 1949 2001 2022 2099 2104 2108 2172 2176 2201 2208 2321 阅读全文

posted @ 2012-03-10 17:39 getgoing 阅读(909) 评论(0) 推荐(0)

2012年3月9日

csu 1242 碱基配对

摘要: 我的思路是先求出类似dp求LCS的数组c,然后计算c的对角线上元素和的最大值,由于和枚举的计算量相同,并且多了给c赋值的过程,耗时要多些,另外也多分配了c这样一个比较大的空间同样的代码分别用C和C++提交耗时分别为720ms、380ms,内存占用2700kb(C少一些,相差500kb),不解。。所有AC中最快的只有64ms,内存占用740kb。。对角线边界的判断还是需要点思考的。。/* csu 1242 */# include <stdio.h># include <string.h># define MAXN 1002char a[MAXN], b[MAXN];sho 阅读全文

posted @ 2012-03-09 13:36 getgoing 阅读(262) 评论(0) 推荐(0)

csu 1242 碱基配对——一个错误的解答

摘要: 早上刚看了如何用 dp 解决LCS,想到了这道题,无奈这道题和LCS不同,还要求对应位置匹配。还是遇到了一个小问题:序列是从1开始的,但是数组的下标是从0开始的,于是想到了gets(a+1)这样的方法,这时要对a[0]赋以非 0 初值/* csu 1242 错误:非LCS问题*/# include <stdio.h># include <string.h># define MAXN 1002char a[MAXN], b[MAXN];short c[MAXN][MAXN];short int solve(void){ short ans, m, n, i, j, tmp 阅读全文

posted @ 2012-03-09 12:54 getgoing 阅读(340) 评论(0) 推荐(0)

csu 1104 Fibonacci Numbers

摘要: 超过8位只输出高低四位,中间用...隔开:Fibonacci numbers get large pretty quickly, so whenever the answer has more than 8 digits, output only the first and last 4 digits of the answer, separating the two parts with an ellipsis (“...”). 高四位的输出:利用通项公式,先求出取对数的小数部分,然后取前四位即可。第四位:直接递推会严重超时!!所以只能用矩阵幂的方法(其实题目提示了用线性代数知识:Use y 阅读全文

posted @ 2012-03-09 00:31 getgoing 阅读(281) 评论(0) 推荐(0)

2012年3月6日

各位数字之和——一个神奇的结论

摘要: 今天下午翻了翻XX大学的ACM模版,作为新手,当然挑能看懂的来看,结果就看到了这样一个简单的问题:题目是这样的,输入一个正整数,将它的各位数字加起来,如果得到的不是一位数,将这个和的各位数字再加起来,如此循环,直到得到一个一位数,最后输出这个个位数。最简单的方法是使用递归模拟上述求和过程,直到和小于10:# include <stdio.h>int dig_sum(int x){ int sum = x; if (x < 10) return sum; else { sum = 0; while (x > 0) { ... 阅读全文

posted @ 2012-03-06 17:38 getgoing 阅读(1358) 评论(0) 推荐(0)

csu 1087 斐波那契数列

摘要: 晕,题目上描述是 N<=20,但是建个20大小的表,提交是WA,用递归提价一下AC了。猜测是为了练习,不让大家偷懒。。猜测测试数据最大的是21。。为了偷懒,建了个25大小的表(注释部分),一提交果然AC,彻底晕倒了,要卡的话应该给个稍大一点的啊。。当然如果特别大,时间限制也要改大一点,谅解了。。。/* 1087: 斐波那契数列 *///用递归法计算第N个斐波那契数,并输出所用到的递归次数//斐波那契数列排列如下:1,1,2,3,5,8,……# include <stdio.h>int fun(int n, int *cnt);//const int f[] = {0,1,1, 阅读全文

posted @ 2012-03-06 10:15 getgoing 阅读(412) 评论(0) 推荐(0)

原创题目

摘要: 1. 用二分法找一个数的整数部分,这个数在区间[1, 9]内。2. 如何通过位运算对一个数(10的倍数)除以10,这种方法真的比直接除以10快吗?3. 一串不超过 k 的序列,由四个字母组合而成:u l r d ,代表着一个3×3棋盘上一个棋子的移动序列,u l r d 分别表示向上、下、左、右四个方向移动,现在限定棋子只能在棋盘内移动,问有多少个这样的不同序列? 提示:不能连续向着一个方向移动超过 3 次(中间可以有非相反方向的移动),即对其中任一连续子序列所有的 u(l) 方向移动次数 p 减去所有的 d(r) 方向移动次数 q 满足 |p - q| <= 2,例如 uuu 阅读全文

posted @ 2012-03-06 09:17 getgoing 阅读(194) 评论(0) 推荐(0)

[转载]scanf和gets的几个区别

摘要: 以下内容转载自:scanf 和 gets 读取字符串深入了解scanf()/getchar()和gets()等函数scanf与gets函数读取字符串的区别今天看到一段话,大致是说gets比scanf()快,有点吃惊,搜了一下,scanf()和gets的区别大致有着几条:1.scanf() 会忽略行开头的所有空格,并以空格、换行符结束输入; 使用getchar()读取scanf语句执行后,缓冲区留下的换行符, gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替;2. 在数据大量的情况下,用gets读取快于scanf()10倍以上(注:来自pudn 阅读全文

posted @ 2012-03-06 09:13 getgoing 阅读(12749) 评论(0) 推荐(2)

2012年3月5日

csu 1054 约瑟夫环

摘要: 约瑟夫环的一个特殊情形:m = 2;"我们把k设为2,然后给n个人,如果最后留下来的人是编号为n的,那么n就叫fix number.现在的问题是,如果给出一个数,要求输出是不是fix number.如果是fix number的话,就输出"Oh,It's a fix number",如果不是的话就输出"Sorry,It isn't a fix number""开始我怀疑形如 2^n-1 是 fix number(充要),只是通过拿 7 和 3 试验感觉到的,后来看了维基百科中的一段话(对k=2情况的讨论)后确信了。下面的 阅读全文

posted @ 2012-03-05 20:21 getgoing 阅读(355) 评论(0) 推荐(0)

约瑟夫环问题(基本)

摘要: n个人围成圈,依次编号为1,2,..,n,现在从1号开始依次报数,当报到m时,报m的人退出,下一个人重新从1报起,循环下去,问最后剩下那个人的编号是多少?递归法参见百度百科:Josephus(约瑟夫)问题的数学方法递推式: 将这些人的编号用对总人数取模所得余数代替(即原编号减一),其中 Fn 表示n个人的环,最后剩下的那个人的编号。由这个递推式不难写出相应代码:/* 约瑟夫环问题 */# include <stdio.h>int main(){ int m, n, i, s; while (~scanf("%d%d", &m, &n)) { s 阅读全文

posted @ 2012-03-05 19:11 getgoing 阅读(3876) 评论(0) 推荐(0)

2012年3月3日

TLE: csu 1211 大整数开平方练习

摘要: 模拟手工开方,必须使用大数,否则只用sqrt()即可。代码有点乱,结果应该是正确的,但是。。TLE了。。。接下来应该考虑把代码变短些,除去不必要的运算。要还是不行,怎么办啊。。。。欢迎各位大牛测试,谢谢指点!/* 大整数开方 */# include <stdio.h># include <string.h># include <stdlib.h># include <math.h># include <time.h># define MAXN 1001void bigN_sqrt(char *s);int bigN_cmp(char 阅读全文

posted @ 2012-03-03 17:19 getgoing 阅读(535) 评论(0) 推荐(0)

2012年3月1日

[转载]位运算小技巧总结

摘要: 转载自Hurricane的百度空间:http://220.181.111.15/%B7%E7%C0%D7%D1%B8%C1%D2/blog/item/bd38bb9e24790f116e068cd1.html(原文格式有点乱,重新排版了一下,如果大家发现了更好玩的,不妨一起分享一下)(1) 整型数循环移位a = (a<<k) | (a>>sizeof(int)-k) // int 型变量循环左移k次a = (a>>k) | (a<<sizeof(int)-k) // int 型变量循环右移k次 (2) 整数的平均值 :对于两个整数x,y,如果用 阅读全文

posted @ 2012-03-01 12:16 getgoing 阅读(216) 评论(0) 推荐(0)

计算素数

摘要: 高效的方法(1000以内)int isPrime(int n){ int i; if (n % 2 == 0) return (n == 2); if (n % 3 == 0) return (n == 3); if (n % 5 == 0) return (n == 5); for (i = 7; i*i <= n; i += 2) if (n % i == 0) return 0; return 1;}测试:(可以先生成1~10000,然后逐个判断,计时)/* isPrime */# include <stdio.h>int isPrime... 阅读全文

posted @ 2012-03-01 00:34 getgoing 阅读(255) 评论(0) 推荐(0)

2012年2月29日

魔方阵

摘要: 群里的朋友问了这道题,刚开始想到的最笨了:枚举,然后就是判断,要是n过大了就。。。。后来参考百度百科给出的分类考虑的方法,尝试了一下,感觉按照方法来一点也不复杂了。。不过百度百科也提到了一种通用的方法,没有尝试。#include<stdio.h># define MAXN 100int a[MAXN][MAXN];void swap(int *x, int *y){ int tmp; tmp = *x; *x = *y; *y = tmp;}void print_odd(int n){ int i, j, t; i = 1; j = (n+1)/2; ... 阅读全文

posted @ 2012-02-29 17:56 getgoing 阅读(270) 评论(0) 推荐(0)

WA:csu1108 Flip Game

摘要: 在POJ上提交用的是枚举,刚学了bfs各种混乱,WA了# include <stdio.h># include <string.h> # define MAX 65536 # define INDEX(i) ((i)>>3)# define OFFSET(i) ((i)%8) # define GET_BIT(i) (vis[INDEX(i)]>>OFFSET(i) & 0x1)# define SET_BIT(i) (vis[INDEX(i)] |= 0X1<<OFFSET(i)) char vis[INDEX(MAX)+1 阅读全文

posted @ 2012-02-29 11:59 getgoing 阅读(564) 评论(0) 推荐(0)

2012年2月27日

[转载]POJ 分类

摘要: 转载自:HUJJ, http://www.cnblogs.com/hujj/archive/2012/02/11/2346539.html初期:一.基本算法:(1)枚举.(poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586)(3)递归和分治法.(4)递推.(5)构造法.(poj3295)(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:(1)图的深度优先遍历和广度优先遍历.(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra)(poj1860,po 阅读全文

posted @ 2012-02-27 08:42 getgoing 阅读(211) 评论(0) 推荐(0)

2012年2月26日

TLE csu 1236: 删数游戏

摘要: 直接做,TLE:View Code /* csu 1236 */# include <stdio.h># include <string.h># define MAXN 2001void del(char *s, int len){ int i; i = 1; while (i < len && s[i-1]<=s[i]) ++i; while (i < len) { s[i-1] = s[i]; ++i; } s[i-1] = '\0';}int main(){ int len, i, S; c... 阅读全文

posted @ 2012-02-26 16:43 getgoing 阅读(281) 评论(0) 推荐(0)

导航