2014年2月14日
摘要: 原题链接这题做得真心纠结,RE两次才ac。思路是每次相乘后都取余,以余数为索引将指数存到数组中,若余数相同的存在,则直接返回当前指数与对应数组元素的和。经典题。附ac代码:#include #include int sign[1001]; //索引int f(long long k){ memset(sign, 0, sizeof(sign)); long long t; int i = 1, j; t = k; while(k < 1000){ k *= t; ++i; } sign[k %= 1000] = i++; for(j = 1; j <= 1001; ++j, ++i 阅读全文
posted @ 2014-02-14 22:21 长木Qiu 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 原题链接经典题,模拟求余。附ac代码:#include #include #define MAX 1000000 + 2char s[MAX];//模拟取余int Simu(int n){ int t = 0, len = strlen(s); for(int i = 0; i != len; ++i){ t = t * 10 + s[i] - '0'; t %= n; } return t;}int main(){ int t, x; scanf("%d", &t); while(t-- && scanf("%s" 阅读全文
posted @ 2014-02-14 20:18 长木Qiu 阅读(174) 评论(0) 推荐(0) 编辑
摘要: --------------------摘自NYOJACM进阶计划ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:lC/C++两种语言l高等数学l线性代数l数据结构l离散数学l数据库原理l操作系统原理l计算机组成原理l人工智能l编译原理l算法设计与分析除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习ACM的同学列的知识清单,但内容不限于ACM的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。大一上学期:必学:1.C语言基础语法必须全部学会a)推 阅读全文
posted @ 2014-02-14 19:37 长木Qiu 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 原题链接可以从最基本的情况开始推,如果m和n的最大公约数为1,那么狼就会遍历所有山洞,兔子就跑不掉了。附ac代码://最大公约数为1时NO#include int main(){ int n, m, t; while(scanf("%d%d", &n, &m) == 2){ while(m){ t = n % m; n = m; m = t; } printf("%s\n", n == 1 ? "NO" : "YES"); } return 0;} 阅读全文
posted @ 2014-02-14 19:07 长木Qiu 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 原题链接打表。附ac代码:#include #include #define MAX 2000000 + 2int a[MAX] = {1, 1};void count(){ int t = sqrt(MAX); for(int i = 2; i <= t; ++i){ if(a[i]) continue; for(int j = i * i; j <= MAX; j += i) a[j] = 1; }}int main(){ count(); int n, i; while(scanf("%d", &n), n){ for(i = 2; i <= 阅读全文
posted @ 2014-02-14 17:54 长木Qiu 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 原题链接水题。附ac代码:#include #include int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ int n, *a, i, t; scanf("%d", &t); while(t-- && scanf("%d", &n)){ i = n; a = (int *)malloc(sizeof(int) *n); while(i--) scanf("%d", &a[i]); 阅读全文
posted @ 2014-02-14 17:39 长木Qiu 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 原题链接快排后取中间那个数。附ac代码:#include #include int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ int n, *a, i; while(scanf("%d", &n) == 1){ i = n; a = (int *)malloc(sizeof(int) *n); while(i--) scanf("%d", &a[i]); qsort(a, n, sizeof(int), cmp); printf 阅读全文
posted @ 2014-02-14 16:54 长木Qiu 阅读(69) 评论(0) 推荐(0) 编辑
摘要: int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;} 阅读全文
posted @ 2014-02-14 16:42 长木Qiu 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 原题链接注意只输入0的时候直接输出0;附ac代码:#include #include #define MAX 100 + 5char s[MAX], buf[MAX];void Compu(int len){ //s[MAX - 1]为个位 int jin, i, j, t; for(jin = 0, i = MAX - 2, j = len - 1; j >= 0; --j, --i){ t = buf[j] - '0' + s[i] - '0' + jin; jin = 0; if(t > 9){ jin = 1; t -= 10; } s[i] 阅读全文
posted @ 2014-02-14 12:51 长木Qiu 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 原题链接10000!大概有35660位。开始我把数组只开到27000位,结果老是WA,后来百度了一下10000!的位数才发现自己数学太捉急了。大概应该这样算,1000到9999共9000 * 3 = 27000个0;100到999共900 * 2 = 1800个0;10!是7位,这样非末尾0相乘共有1000*7=7000位,综上,合计位数大约35000多位,保险起见,数组开到40000;附ac代码:#include #include #define MAX 40000int A[MAX];int find(){ int i = MAX; while(!A[--i]) ; return i;}. 阅读全文
posted @ 2014-02-14 11:12 长木Qiu 阅读(227) 评论(0) 推荐(0) 编辑