acm入门
ACM 程序设计竞赛入门:第1讲 快速入门

2020/12/10
29
Problem Description
Your task is to Calculate a + b.
Input
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.
Sample input:
也可以写成: cin.getline(name,4);
2020/12/10
26
输出(1):
一个Input Block对应一个Output Block, Output Block之间没有空行。 参见:HDOJ_1089
/showproblem.php ?pid=1089
}
while(scanf(……..)&&……) { ....
}
C++语法:
while( cin >> n && n != 0 ) {
.... }
2020/12/10
18
输入(4):
以上几种情况的组合
/showproblem.php ?pid=1092
/showproblem.php ?pid=1093
ACM程序设计算法原理和ACM入门

}
2020/5/11
40
伪代码——算法语言
伪代码(Pseudocode):介于自然语言和 程序设计语言之间的方法,它采用某一程序 设计语言的基本语法,操作指令可以结合自 然语言来设计。
优点:表达能力强,抽象性强,容易理解
2020/5/11
41
欧几里德算法
1. r = m % n; 2. 循环直到 r 等于0
2020/5/11
32
【例2】变量计数之一。
(1) x=0;=0;
(2) for(k-1;<=n;++)
(3) x++;
(4) for(i=1;<=n;++)
(5) for(j=1;j<=n;++)
(6) y++;
该算法段的时间复杂度为T(n)=Ο(n2)。
当有若干个循环语句时,算法的时间复杂度是由嵌 套层数最多的循环语句中最内层语句的频度f(n)决定的。
2020/5/11
7
2010年的风采
2020/5/11
8
2020/5/11
9
2020/5/11
10
2020/5/11
11
2020/5/11
12
2020/5/11
13
2020/5/11
14
2020/5/11
15
2020/5/11
16
2020/5/11
17
2020/5/11
18
2020/5/11
19
2020/5/11
20
2020/5/11
21
2020/5/11
22
第一部分 算法概述
C语言速成与ACM入门PPT课件

• scanf的格式为 scanf("……“, &a,……);
• 例如
• int a;
• scanf("%d",&a);
• %以及后面的内容为需要代换的内容,不同的字母有不同的含义:
• %d:一个整数
• %f:一个小数
• %c:一个字符
• %s:一个字符串(遇到空格与回车的时候结束)
• %%:一个百分号
第25页/共36页
Page 25
初学者易犯的错误
• 题目:输入两个数,输出该两个数的差 • 样例输入:12 3 • 样例输出:9
• #include<iostream> using namespace std;
int main(){ int a,b; cout << "Please input the numbers:"; cin>>a>>b; cout << "The answer is:" << a-b << endl; return 0;
• #include<iostream> using namespace std;
int main(){ cin >> a>>b; cout <<a-b<<endl; return 0;
}
没有endl会返回PE
第27页/共36页
Page 27
ACM常用技巧
• 一般而言,C++的cin与cout速度上会比C语言的scanf和printf慢很多,所以我们推荐使用scanf和printf 而不是cin cout
ACM相关介绍与入门

27
完整代码如下(其中endl是换行):
#include <iostream> using namespace std; int main() { int a,b; while(cin>>a>>b) { cout<<a+b<<endl; } return 0; }Pa来自e 28Page 19
19进一步了解请找谷歌Page 2020
ACM入门
参加ACM绝对少不了的是在网上做 练习。 建议新人先对浙江工商大学的OJ做 一个大概的了解,用心一点,随便 点一下连接做个了解。
Page 21
21
点击页面右上方Register注册一个账号
在User ID一栏请 用wyu_前缀,方 便统一查看,如 wyu_abcd
ACM LOGO
ACM相关介绍
序言:
发现很多人都不了解ACM是什么,虽 然每个学年都有ACM的宣传,但绝大 部分人都在知道ACM是编程后就点到 即止。所以个人觉得很有必要再介绍一 下ACM。 校ACM的创始人Bibby前辈在校论坛也 发过一些贴做介绍,但很少人知道,现 在校内的网络也上不去论坛了。
每一次进入循环体,n都会减掉1,当n为0的时候就会结束 循环。
Page 29
29
1078可以这样写:
while(cin>>a>>b&&(a!=0||b!=0)) { …… }
或者:
while(1) { cin>>a>>b; if(a==0&&b==0) break; …… }
Page 30
char a[10]; cin.getline(a,10);
ACM 入门介绍

f=m%100%50%10%5%2;
k=k+a+b+c+d+e+f; } printf("%d\n",k); scanf("%d",&n); } return 0;
}
ACM同学签到
• • • • • • • • 1001 2004 2003 2001 2006 2000 1012 1008 2002 求体积 2007 2009 2013 2011
ACM 入门啦
讲什么
• 怎样注册? • 怎样做简单题?
注册
• 地址栏输入:/
注册
• 现在 我们还没有登录帐号 所以 我们来注册 一个
注意啦
• • • • • • • 带*为必填项 第一项:验证码 输入即可 第二项:登录名 即用户名 注册后不可更改 第三项:登录密码 第四项:重输密码 以便验证密码是否一致 第五项:邮箱 第十项、第十一项:生日、国家
几点说明:
• 1、登录名需未被别人注册过 – 统一用 dqnu_学号 • 2、登录名注册后不可改 昵称可改
– Nick Name:年级班级姓名
– 例 14计1王涛
• 填写完成后 按右下角 Submit 提交
杭电acm注册
注册成功后:
点 击 此 处 进 入 题 库
杭电acm注册
杭电acm注册
以1000题为例:
杭电acm注册
提交Leabharlann 杭电acm注册编程语言选择
源代码区域
杭电acm注册
将在VC++6.0上编好的 代码复制在源代码区 域 提交即可
1000题源代码
提交
杭电acm注册
查看 AC了
C语言速成与ACM入门

数据 类型
运算 符
函数
语言
语句
指针
数组
Page
1
C++语言速成
int:整型数字,输入的数字均为整数
float:浮点数,用来存储小数
char:字符,用来存英文字母、数字 或其他字符
Page
2
数据类型
数据类型可加入以下扩展声明: short:该数据类型精度较小 long:该数据类型精度较大 (例: short int 范围为 -32768 ~ 32767, long int 范围为 -2147483648 ~ 2147483647) unsigned: 该数据类型没有符号位 signed:该数据类型有符号位 (例: signed long int 范围为 -2147483648 ~ 2147483647, unsigned long int 范围为 0 ~ 4294967295) long float 可以写作 double
内存第k 个格子
a[0] k+1 个格子
……
内存第l个格子, 存储的值为k
p=k
Page
17
数组与指针
双指针:用来存储某个指针的地 址 int **p1 = &p; p1 → &p (l) *p1 → p (k,a,&a[0]) **p1 → a[0] &p1 → ?
a[0] a[1] a[2] a[3] a[4]
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
……
……
Page
15
数组与指针
地址:存储一个数据的位置 取址运算&:获得该数据的地址 取值运算*: 获得该地址的数据 a实际上指的就是a[0]的地址 即*a → a[0] &a[0] → a &a[1] → a+1
ACM 程序设计竞赛入门:第5讲 搜索题
2020/12/10
17
深入分析
p,q的范围其实可在2—50000(why?) 然而,这是最小的范围吗?
考虑大于10000的某个质数,不妨设为Q,另一 个质数为P,则:
如果P<10,P/Q<0.001 如果P>10,P*Q>100000
而考虑到a,b的取值范围(1<=a<=b<=1000) 可知min(a/b)=0.001
1.先访问左子树 2.再访问右子树 3.最后访问根结点 4.对于左右子树的访问也要满足以上规则
示例如下:
2020/12/10
26
1
2
3
4
56
7
以上二叉树的后根遍历序列是:??
4、5、 2、 6、7 、 3、 1
2020/12/10
27
(4)层次遍历
对树的访问次序是:
1.先访问根结点 2.再访问根结点的子节点(即第二层节点) 3.再访问第三层节点
同时,要求: p*q<=m<=100000
所以无论如何质数都不能超过10000。(事实上,
不会超过9091)
2020/12/10
18
搜索时的技巧:
搜索顺序很重要。建议从大往小搜 ( num:质数的个数 ) for (i=num-1;i>=0;i--) for (j=i;j<=num-1;j++) ……
(6)若后继节点中某一个是目标节点,则找 到一个解,成功退出。否则转向(2)循环。
2020/12/10
41
例、节点搜索示意图
OPEN
S
CLOSED
S
A, H,
A
R, F,
最新HNUSTC语言基础简单数据结构acm入门第一讲搜索
ACM题型分类
• 1,基本算法 • 2,图算法 • 3,数据结构 • 4,搜索 • 5,动态规划 • 6,贪心 • 7,数学 • 8,计算几何 • 9,模拟
9
搜索概论
• 搜索被称为“通用解题法”,在算法和人 工智能中占据重要地位。
• 但由于它巨大的局限性和自身灵活性,也 被认为是最难学难用的算法之一。
28
POJ 2243 Knight Moves
• 国际象棋棋盘上有一个马,要从起点跳到 指定目标,最少跳几步?
a1
a bcd ef gh
输入:
1
2
a1 h8
3
输出:
4
To get from a1 to h8 takes 6 knight moves.
5
6
7
h8
8
29
跳马规则
在2×3的矩形里:
a bcd ef gh
26
BFS
• 广搜例子:你的眼镜掉在地上以后,你趴在 地板上找。你总是先摸最接近你的地方, 如果没有,再摸远一点的地方……
27
BFS程序基本结构
定义一个队列; 起始点加入队列;
while(队列不空) {
取出队头结点; 若它是所求的目标状态,跳出循环; 否则,从它扩展出子结点,全都添到队尾;
}
若循环中找到目标,输出结果; 否则输出无解;
1 2 3 4 5 6 7 8
30
• 例如:从a1到e4
当目标出现在所扩展出的结点里, 结果就找到了。
帮助小明
• 这是一个0-1背包问题。 • 对于每件物品,有两种选择: • 1)拿这件物品(条件是最大重量不超过m) • 2)不拿这件物品 • 下面程序给出0-1背包的dfs解法,效率无法忍
对ACM初学者的意见及推荐ACMer看的书
对ACM初学者的意见及推荐ACMer看的书对ACM初学者的意见及推荐ACMer看的书一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。
下面给个计划练练:第一阶段:练经典常用算法,下面的每个算法打上十到二十遍,同时自己精简代码。
因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来.1.最短路(Floyd、Dijstra,BellmanFord)2.最小生成树(先写个prim,kruscal要用并查集,不好写)3.大数(高精度)加减乘除4.二分查找. (代码可在五行以内)5.叉乘、判线段相交、然后写个凸包.6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.8. 调用系统的qsort, 技巧很多,慢慢掌握.9. 任意进制间的转换第二阶段:练习复杂一点,但也较常用的算法。
如:1. 二分图匹配(匈牙利),最小路径覆盖2. 网络流,最小费用流。
3. 线段树.4. 并查集。
5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp6.博弈类算法。
博弈树,二进制法等。
7.最大团,最大独立集。
8.判断点在多边形内。
9. 差分约束系统.10. 双向广度搜索、A*算法,最小耗散优先.给学习算法的人一点买书的建议吧。
希望中国计算机和软件专业的大学生能更多的重视算法学习。
1. <The Art of Computer Programming> Knuth的巨作计算机算法科学的Bible2. <Introduction to Algorithm> 传说中的宝典3. <Concrete Mathematics> Knuth对于计算机数学的经典理解4. <Introductory Combinatorics> 计算机研究生必修的专业课程5. <Computational Geometry in C> 计算几何6. <Discrete Mathematics and Its Applications> 经典离散数学教材7. <Data Structures,Algorithms, and Applications in C++> 相当经典的数据结构和算法入门教材8. <算法艺术与信息学竞赛> 刘汝佳的杰作,引导着信息学竞赛的发展9. <实用算法的分析与程序设计> 传说中的黑书。
ACM入门讲座
我校ACM成绩发展状况 成绩发展状况 我校
电信学子在省大学生程序设计大赛中首次夺金
我校ACM成绩发展状况 成绩发展状况 我校
电信学院举办校第一届ACM程序设计大赛
ACM在线测评系统的使用 在线测评系统的使用
国外的: 国外的:(Online Judge) UVA :http://acm.uva.es/contest/ 西班牙的,号称世界第一OJ 西班牙的,号称世界第一 URAL :http://acm.timus.ru/schedule.aspx 俄罗斯的, 俄罗斯的,数学味浓 SGU :http://acm.sgu.ru/contests.php 俄罗斯的,题目很少, 俄罗斯的,题目很少,但数学味很浓 USACO :/contestgate 美国的,很多oier都在上面训练 美国的,很多 都在上面训练 SPOJ :https://www.spoj.pl/ 排名方式独特, 排名方式独特,而且支持很多语言
Input Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed. Output For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input. Sample Input 1 5 10 20 0 0 Sample Output