2014年2月14日
摘要: --------------------摘自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 阅读(70) 评论(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 阅读(229) 评论(0) 推荐(0) 编辑
  2014年2月13日
摘要: 原题链接其实这题不需要像大数那样操作。简单题。附ac代码:#include #include #include char BUFA[15], BUFB[15];int main(){ int i, j, k; int a, b; while(scanf("%s%s", BUFA, BUFB) == 2){ i = strlen(BUFA); j = strlen(BUFB); a = b = 0; for(k = 0; k != i; ++k){ if(BUFA[k] == ',') continue; if(isdigit(BUFA[k])){ a = a 阅读全文
posted @ 2014-02-13 15:53 长木Qiu 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 原题链接注意要细心。附ac代码:#include #include #include #include #include using namespace std;#define MAX 1000 + 5char s[MAX];int main(){ vector vec; int t, sign; while( scanf( "%s", s ) == 1 ){ t = sign = 0; for( int i = 0; i != strlen(s); ++i ){ if( s[i] == '5' ){ ... 阅读全文
posted @ 2014-02-13 15:26 长木Qiu 阅读(109) 评论(0) 推荐(0) 编辑