acm

ACM进阶计划

怎甘沉沦 提交于 2020-03-14 11:31:58
ACM进阶计划 ACM 队不是为了一场比赛而存在的,为的是队员的整体提高。 大学期间, ACM 队队员必须要学好的课程有: l C/C++ 两种语言 l 高等数学 l 线性代数 l 数据结构 l 离散数学 l 数据库原理 l 操作系统原理 l 计算机组成原理 l 人工智能 l 编译原理 l 算法设计与分析 除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。 以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习 ACM 的同学列的知识清单,但内容不限于 ACM 的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。 大一上学期: 必学: 1. C 语言基础语法必须全部学会 a) 推荐“语言入门”分类 20 道题以上 b) 提前完成 C 语言课程设计 2. 简单数学题(推荐“数学”分类 20 道以上) 需要掌握以下基本算法: a) 欧几里德算法求最大公约数 b) 筛法求素数 c) 康托展开 d) 逆康托展开 e) 同余定理 f) 次方求模 3. 计算几何初步 a) 三角形面积 b) 三点顺序 4. 学会简单计算程序的时间复杂度与空间复杂度 5. 二分查找法 6. 简单的排序算法 a) 冒泡排序法 b) 插入排序法 7. 贪心算法经典题目 8. 高等数学 以下为选修: 9. 学会使用简单的 DOS 命令(较重要) a) color/dir

转:经典ACM算法

荒凉一梦 提交于 2020-03-13 07:15:47
实验一 统计数字问题 实验二 最大间隙问题 实验三 众数问题 实验四 半数集问题 实验五 集合划分问题 实验六 最少硬币问题 实验七 编辑距离问题 实验八 程序存储问题 实验九 最优服务次序问题 实验十 汽车加油问题 实验十一 工作分配问题 实验十二 0-1背包问题 实验十三 最小重量机器设计问题 实验十四 最小权顶点覆盖问题 实验十五 集合相等问题 实验十六 战车问题 实验一 统计数字问题 1、问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 2、题目分析: 考虑由0,1,2,…,9组成的所有n位数。从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为。 满足如下递归式: 由此可知,。 据此,可从低位向高位进行统计,再减去多余的0的个数即可。 3、算法设计: 定义数组a[10]存放0到9这10个数出现的次数,个位为第0位,第j位的数字为r。采用while循环从低位向高位统计: a. 统计从个位算起前j位0~9个数; b. 如果j+1位为0,去掉第j+1位补0个数; c. 统计第j+1位出现1~(r-1)个数; d.

ACM

≯℡__Kan透↙ 提交于 2020-03-11 19:19:01
输入由一系列整对a和b组成,用空格隔开,每行一对整数 (0<=a,b<=10000) 对于每一对输入整数a和b,你应该在一行中输出a和b的和,并且在输入的每一行中输出一行 eg:输入 1 5 10 20 输出 6 30 #include using namespace std; int main() { int a,b; while(cin>>a>>b) { if(0<=a&&b<=10000) cout<<a+b<<endl; else break; } return 0; } 来源: CSDN 作者: real_pcyy 链接: https://blog.csdn.net/real_pcyy/article/details/104801777

算法 acm?(一些转载)

做~自己de王妃 提交于 2020-03-07 03:16:32
转载: 这么说吧,功利一点,算法不好或者不达标,进好公司基本没戏,说得逼格高一点,算法是程序的灵魂,如果程序员都不懂算法,那就真成了搬砖的,写个程序和计算1+1就没什么区别了,这就和一些人说学数学对写代码没啥用一样,通常说这些话的都是水平不咋地的程序员,逼格再高一点,算法锻炼的是解决问题的思维方式,有人说那是靠刷题刷出来的,可是除了少数天才,有谁的学习过程不是重复练习的过程呢?难道高中学到的东西不是靠做习题学习到的吗?只是学习能力强的人能通过练习将知识化为己用,举一反三而已,题主千万不要被那些浅薄的观念欺骗。 转载: 优秀的小伙伴都知道,学好算法与数据结构, 不单单是为了应付技术面试的需要,更重要是提升自身编程水平。 那么程序员到底需不需要精通算法呢? 首先,一个出色的程序员并不一定要精通算法,毕竟发展的方向很多。 但是,一个人连基本的算法都掌握不了,他肯定成不了优秀的程序员。 前者是选择,后者是能力,能力不够的人谈选择,就是找借口。 有个程序员小哥哥说: 搬砖 + 算法 = 稳定快速的搬砖 , 真相了,高质量的代码,才能让项目运行如飞! 确认过眼神 ,修炼过算法的人,是高手程序员没错了······ 转载: 这么多年,你听说过技术过时,什么时候听说过算法过时,不仅没有过时,因为机器学习、大数据的要求,算法变得越来越重要了 转载: 算法对于非专业人来说,确实比较难理解

POJ -- 2251 Dungeon Master

廉价感情. 提交于 2020-03-03 10:33:00
题目网址: POJ -- 2251 很典型的宽度优先搜索,尽管是一个三维的图,方法还是一模一样。 队列放入入口坐标,从入口坐标不断向外一层一层拓展,拓展到的元素进入队列并且标记该元素到入口的距离。 #include <cstdio> #include <queue> #include <cstring> #include <iostream> using namespace std; const int maxn = 50; int L, R, C; int Sz, Sx, Sy; int Ez, Ex, Ey; char maze[maxn][maxn][maxn]; int dist[maxn][maxn][maxn]; int vis[maxn][maxn][maxn]; queue<int> q; int bfs() { while(!q.empty()) q.pop(); q.push(Sz); q.push(Sx); q.push(Sy); dist[Sz][Sx][Sy] = 0; vis[Sz][Sx][Sy] = 1; /// 表示已在队列中 while(!q.empty()) { int z = q.front(); q.pop(); int x = q.front(); q.pop(); int y = q.front(); q.pop(); if(z ==

片刻遐思,片刻思虑

一个人想着一个人 提交于 2020-03-03 01:22:57
说实话,当时选择去写博客,是为了让自己的大学生活有记录,让自己有着前行的动力,现在想想也可以去记录自己的心得体会。 如果不累,那么我的梦想岂不是很廉价!!! 时间太瘦,指缝太宽,大一上学期,就这样过去了,当然了也结了许多好友,还记得入学时,老师就为我们讲了一下关于acm的事情,那时候自己对acm还是不太了解,觉得比较牛逼吧,后来通过讲座和学长,学姐的讲述我慢慢的知道了,acm,那时候自己就想去打acm,经过这个寒假更加坚定了想法。我上学期,报名了,院赛新生赛,虽然没拿到奖,差一点点,心里确实挺失落的,也收获了蛮大的,最关键的收获吧!大一上,就这么平平淡淡的过完了,最后绩点也是勉勉强强看得过去而已,没有达到我的目标。 最近再学数据结构;发现最近C语言后面的链表,没学好,终究还得回来再补一下,又可能最近的事比较多,触发 了心绪,就决定记录一下。 寒假,我不想像我高中那时虚度光阴,毕竟自己20了,得为将来想想了,于是开始刷题:我一般就在两个网站刷题: 第一个当然是我们学校oj: HNUCM-OJ 第二个是杭州电子科技大学oj: 杭电OJ 这是我在我自己学校oj上写的题; 当然了,我写的题目不多只有40道, 加上洛谷的我估计我应该刷了180道这个寒假; 其实,我写的都是些水题,根本上不了台面。 最近由于课程比较繁重,对于刷题一天也是8~10左右,我想只要坚持下去就OK了,毕竟: 放弃简单

uva 755

荒凉一梦 提交于 2020-03-02 08:21:34
题目 Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University of Waterloo by dialing the memorable TUT-GLOP. Sometimes only part of the number is used to spell a word. When you get back to your hotel tonight you can order a pizza from Gino's by dialing 310-GINO. Another way to make a telephone number memorable is to group the digits in a memorable way. You could order your pizza from Pizza Hut by calling their ``three tens'' number 3-10-10-10. The standard form of a

HDU ACM Steps:找新朋友

痴心易碎 提交于 2020-03-01 16:37:09
目录 HDU ACM Steps:找新朋友 题目描述 输入 输出 输入样例 输出样例 思路 一般思路 正确的打开方式 代码 HDU ACM Steps:找新朋友 题目描述 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。 输入 第一行是测试数据的组数CN(Case number,1<CN<10000),接着有CN行正整数N(1<n<32768),表示会员人数。 输出 对于每一个N,输出一行新朋友的人数,这样共有CN行输出。 输入样例 2 25608 24027 输出样例 7680 16016 思路 一般思路 1.求出n的质因数,储存在ar[]中。 2.删除所有小于n且是ar[i]的倍数的数。 3.求得剩余数的数量。 正确的打开方式 用欧拉函数便可以解决。 欧拉函数: https://editor.csdn.net/md/?articleId=104588974 代码 # include <stdio.h> typedef long long ll ; int cn , n ; ll eular ( ll n ) //欧拉函数 { ll ans = n ; for ( int i = 2 ;

2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest

≡放荡痞女 提交于 2020-02-28 05:23:58
2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest A. Fried Fish 题意:有N条鱼,有一个同时可以煎k条鱼的锅,鱼两个面都要煎; 分析:k*2个面要煎,是否有一种方式可以让锅没有空闲,当时我举了几个例子,确实可以找到,没有证明,注意n<k的情况 #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { freopen("INPUT.TXT","r",stdin); freopen("OUTPUT.TXT","w",stdout); int x,y; while(scanf("%d%d",&x,&y)!= EOF) { if(2*x<=y) printf("2\n"); else { if((2*x)%y==0) printf("%d\n",(2*x)/y); else printf("%d\n",(2*x)/y+1); } } return 0; } B. Hanoi tower 题意:用给出的汉诺塔算法,求出第一次相同时的步数; 分析: 网上有一个公式:先求出n层从A到B的步数:d(n)=d(n-1)*2+1 然后:ans(n)= d(n/3*2-1)+d

HDU ACM Steps:How many prime numbers

不羁岁月 提交于 2020-02-28 04:53:27
目录 HDU ACM Steps:How many prime numbers 问题描述 输入 输出 输入样例 输出样例 思路 代码 HDU ACM Steps:How many prime numbers 问题描述 Give you a lot of positive integers, just to find out how many prime numbers there are. 输入 There are a lot of cases. In each case, there is an integer N representing the number of integers to find. Each integer won’t exceed 32-bit signed integer, and each of them won’t be less than 2 输出 For each case, print the number of prime numbers you have found out. 输入样例 3 2 3 4 输出样例 2 思路 1.判断每个数是否为素数并计数即可 2.比较简单的判断素数的方法: 如果N是合数,则一定存在大于1小于N的整数a和b,使得 N = a × b N=a \times b N = a × b 。 如果a和b均大于N,则有: