ACM(lecture_03)PPT课件
ACM培训材料PPT课件

}
2020/10/13
7
注意上面程序的M的好处
上面M定义为10000,这样不仅提高了效率而 且也节省了空间
如果要你把N阶乘转成2或3进制你会吗? 如:把18!转换成2进制. 如果你不会,那么你还没对那个程序M深刻
理解.
2020/10/13
8
N!末尾有多少个0
很简单,只要N!有多少个5这个因子,就有多少 个0.
进位e=0 (e=(a[1]+b[1]+e)/10) c[2]=(a[2]+b[2])%10+e=0, 百位进位e=1,依次下去,
最后把数组输出就是结果(要倒过来输出)
2020/10/13
4
对上面例子的实现
#include<stdio.h>
#include<string.h>
#define N
{
p=a[i]+b[i]+e;
c[i]=p%10;
e=p/10;
}
lc=lb;
while(e>0)
{
lc++;
c[lc]=e%10;
e/=10;
}
for(i=lc;i>=0;i--)
{
printf("%d",c[i]);
}
printf("\n");
return 0;
}
2020/10/13
5
用高精度算N阶乘
汇报人:XXXX 日期:20XX年XX月XX日
11
详细见课堂分析.
2020/10/13
9
fjnu:1743 fjnu:1185 fjnu:1307 fjnu:1191 fjnu:1158
北京大学ACM国际大学生程序设计竞赛课件3

Problem
Conqueror's batalion
Table of Contents
The problem Solution
The problem
CENTRAL EUROPEAN OLYMPIAD IN INFORMATICS
30 June – 6 July 2002 Day 1: conquer Conqueror's battalion Time limit: 1 s Memory limit: 16 MB
The problem
If at least one of your soldiers reaches the uppermost stair, you will be the winner, in the other case, you will be the loser.
The problem
The problem
In case the game ends (either because you won or there are no more soldiers in the game), the library will terminate your program correctly. Your program may not terminate in any other way.
The problem
For each stair, you are given the number of soldiers standing on it, with number 1 being the uppermost stair and N the bottom one. None of your soldiers stands on stair 1 at the beginning.
ACM培训精品PPT课件

DP (Dynamic Programming) 动态编程,动 态规划
DFS (Depth First Search) 深度优先搜索
BFS (Breadth First Search) 宽度/广度优先搜 索
输入输出
%d %lld %lf自动扫描前导空格 比如:读入5个整数到A[5]
输入文件中,数的排布是这个样子
35 26 78
99
206
不管它,直接5次%d
for ( int i = 0; i < 5; i++ ) scanf(“%d”, A + i);
%lld用于输入和输出长整数(long long,64位) %lf用于输入输出double
cout<<"j="; printf("%d\n", j); } return 0; }
0
1
j=0 j=1 j=2 j=3
2 3 4 j=j=j=j=j=
j=4
输入输出
scanf
输入格式
%d %lld %c %s %lf
对每种格式搞清楚一个重要问题
是否自动跳过前导空白?
什么是空白:空格,TAB,回车
输入输出
%s 读一个字符串,自动扫描前导空白,读到 空白结束
如: abcd efgh,将读出”abcd”
%c读一个字符,但是不扫描前导空白
如何读一个非空白字符呢?
比如,读取某人的信息,其性别用M/F表示
TopBoy M ComputerScience
Kitty
ACM培训精品PPT课件

自己过滤空格?麻烦!
输入输出
读一个非空白字符, 方法一:
char str[2]; scanf(“%1s”, str); // %1s扫描前导空白,并且只读一个字符 char c = str[0]; 方法二: 强制扫描空白 在%前面加上一个空格表示“强制扫描前导空白” scanf(“ %c”, &ch); 前面那个读人物信息的完整scanf语句:
LCS (Longest Common Subsequence) 最长 公共子串
输入输出
C:
scanf printf
C++:
cin cout
速度快 格式容易控制
使用简单, 自动识别类型 格式控制较麻烦
数据规模较大时, 推荐(必须)使用scanf 以 避免超时(TLE)
输入输出
cout: 带缓冲输出 printf: 不带缓冲输出
Ctrl+Z 2.最好不要把C和C++的输入输出语句混着用,会造成一些莫名其妙的问题 3.我个人倾向于使用纯C的输入输出,因为方便且速度快。
关于重定向操作
当程序要输入的内容很多时,从文件读入的操作变得非常重 要,特别是需要调试时,这样可以避免你反复的从键盘敲入重
复的内容。
使用标准输入语句,可以使用重定向命令行
scanf(“%s %c %s”, name, &gender, ability);
输入输出
同理,我们也可以用其它字符来扫描其它类型 的无关输入
比如,输入年月日的信息
2007-08-03 scanf(“%d-%d-%d”, &y, &m, &d); 其它类似
浮点数的输入问题
为什么说while(in!=0.00)不合理呢? 如果不合理应该怎么判断!!
ACM 入门精品PPT课件

2020/10/21
10
如何排名?
首先根据解题数目进行排名。 如果多支队伍解题数量相同,则根据总用时加上惩
罚时间进行排名。 总用时和惩罚时间由每道解答正确的试题的用时加
上惩罚时间而成。 每道试题用时将从竞赛开始到试题解答被判定为正
确为止,其间每一次错误的运行将被加罚20分钟时 间,未正确解答的试题不记时。
州);
2020/10/21
7
ACM in XTU
2004年,第一次参加亚洲区预选赛(网络预赛) 2005~2011,每年10月左右——
湖南省第1~6届大学生程序设计竞赛 2004~2010,每年10~12月——
第29~35届ACM国际大学生程序设计竞赛 亚洲区预选赛
2020/10/21
8
预期赛事(今后每年)
校程序设计竞赛
个人编程能力的比拼 中文或者英文题目,考察编程基本功
2020/10/21
13
ACM队队员的基本原则
基本要求
人品好 愿意花时间在这项赛事上 有团队合作精神
能力要求
程序设计 英语科技文献阅读
数学
2020/10/21
14
开课目的
为湘大ACM代表队培养后备人才 提高分析问题和应用计算机编程解决
ACM
第一讲
ACM入门
(Introduction to ACM)
2020/10/21
2
第一部分
ACM简介
2020/10/21
What is ACM ?
ACM-(Association for Computing Machinery)
成立于计算机诞生次年,是目前计算 机学界中历史最悠久、最具权威性的 组织…
第3讲__递推专题讲座_acm

第3讲 递推递推是一种应用非常广泛的常用算法之一,与下一章的递归有着密切的联系。
本章探讨递推在求解数列、数阵以及计数等应用案例方面的应用。
3.1 递推概述在纷繁变幻的世界,所有事物都随时间的流逝发生着微妙的变化。
许多现象的变化是有规律可循的,这种规律往往呈现出前因后果的关系。
某种现象的变化结果与紧靠它前面变化的一个或一些结果紧密关联。
递推的思想正体现了这一变化规律。
3.1.1 递推算法所谓递推,是在命题归纳时,可以由n −k,…,n −1的情形推得n 的情形。
一个线性递推可以形式地写成11()n n k n k a c a c a f n --=+++ 其中f(n)=0时递推是齐次的,否则是非齐次的。
递推的一般解法要用到n 次方程的求根。
递推关系是一种高效的数学模型,是组合数学中的一个重要解题方法,在组合计数中有着广泛的应用。
在概率方面利用递推可以解决一类基本事件个数较大的概率问题。
在对多项式的求解过程中,很多情况可以使用递推算法来实现。
在行列式方面,某些n 阶行列式只用初等变换难以解决,但如果采用递推求解则显得较为容易。
递推关系不仅在各数学分支中发挥着重要的作用,由它所体现出来的递推思想在各学科领域中更是显示出其独特的魅力。
递推是利用问题本身所具有的一种递推关系求解问题的一种方法。
设要求问题规模为n 的解,当n=1时,解或为已知,或能非常方便地得到解。
能采用递推法构造算法的递推性质,能从已求得的规模为1,2,…,i −1的一系列解,构造出问题规模为i 的解。
这样,程序可从i=0或i=1出发,重复地由已知至i −1规模的解,通过递推,获得规模为i 的解,直至得到规模为n 的解。
递推算法的基本思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法充分利用了计算机的运算速度快和不知疲倦的特点,从头开始一步步地推出问题最终的结果。
使用递推算法编程,既可使程序简练,又可节省计算时间。
对于一个序列来说,如果已知它的通项公式,那么要求出数列中某项之值或求数列的前n项之和是简单的。
ACM培训03-动态规划

p( q+1,r,k-1 )
d ( l , q )= s[l] s[l+1]…s[q]
q的变化范围:从q+1到r之间所包含 的数字个数应大于k-1(乘号个数)。
r-(q+1)+1>k-1 q<r-k+1
p( l,r,k )=max{ d( l, q ) * p( q+1, r ,k-1 ) }
状态转移方程:用数学公式描述与阶段相 关的状态间的演变规律。
动态规划是运筹学的一个重要分支,是解 决多阶段决策过程最优化的一种方法。
所谓多阶段决策过程,是将所研究的过程 划分为若干个相互联系的阶段,在求解 时,对每一个阶段都要做出决策,前一 个决策确定以后,常常会影响下一个阶 段的决策。
动态规划所依据的是“最优性原理”。
显然,要依照上述递推过程求解,需要倒 过来,从P(P)出发,先求出第一阶段的P(O) 和P(N),再求第二阶段的P(K),P(L), P(M);……,最后得到P(A)。
3. 选择数据结构,将每条路经的长度存在数 组中。
东西方向上的道路长度存在两维数组h[4][3]中规 定数组的第一维为行号,第二维为列号。
10 动态规划
任务:
P是出发点,从P到A,求最短路径(图1)
G
3 D 1B 2
A
1
2
2
3
K
3 H
4 E
5
4
1
2
N
2 L
1 I
4
2
2
3
3
2
3
C
4
阶段5
F
4 阶段4
P
O
M
J
阶段1
阶段2 阶段3
ACM入门之三-位运算ppt课件

上面程序的输出结果是:
n1=78000,n2=-32768,n3=32768,c=c0,c<<4=3072
右移运算符
右移运算符“>>”是双目运算符。
其计算结果是把“>> ”的左操作数的各二进位全部 右移若干位后得到的值,要移动的位数就是“>>”的 右操作数。移出最右边的位就被丢弃。
对于有符号数,如long,int,short,char类型变量, 在右移时,符号位(即最高位)将一起移动, 并且大多数C/C++编译器规定,如果原符号位 为1,则右移时右边高位就补充1,原符号位为0, 则右移时高位就补充0。
右移运算符实例
#include <stdio.h> main() { int n1 = 15; short n2 = -15; unsigned short n3 = 0xffe0; unsigned char c = 15; n1 = n1>>2; n2 >>= 3; n3 >>= 4; c >>= 3; printf(
例如:表达式“21 | 18 ”的值是23(即二进制数 10111)。 按位或运算通常用来将某变量中的某些位置1或 保留某些位不变。 例如,如果需要将int型变量n的低8位全置成1, 而其余位不变,则可以执行:
n |= 0xff;
13
按位异或
按位异或运算符“^”是双目运算符。
功能:将参与运算的两操作数各对应的二进制位进 行异或操作,即只有对应的两个二进位不相同时, 结果的对应二进制位才是1,否则为0。
HDU3782xxx定律
/showproblem.php?pid=3782 Problem Description
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
样例输出 2 7
2021/2/11
14
思考2分钟:如何解决?
2021/2/11
15
结论:
Zn = 2n ( 2n + 1 ) / 2 + 1 - 2n = 2 n^2 – n + 1
为什么?
2021/2/11
16
趁热打铁, 来个差不多的☺
2021/2/11
17
附加思考题(还没加到OJ):
ACM程序设计
2021/2/11
1
今天,
你 了吗?
2021/2/11
2
每周一星(2):
07052311周天 涯
2021/2/11
3
第三讲
递推求解
2021/2/11
先来看一个超级简单的例题:
有5人坐在一起,当问第5个人多少岁, 他说比第4个人大2岁,问第4个人多 少岁,他说比第3个人大2岁,依此下去, 问第一个人多少岁,他说他10岁,最 后求第5个人多少岁?
2021/2/11
25
再思考题:
有1×n的一个长方形,用1×1、1×2、1×3的骨牌铺 满方格。例如当n=3时为1×3的方格(如图),此时 用1×1,1×2,1×3的骨牌铺满方格,共有四种铺法。
输入: n(0<=n<=30
); 输出:
铺法总数
2021/2/11
26
典型例题
分析过程:
仔细分析最后一个格的铺法,发 现无非是用1×1,1×2,1×3三种铺法, 很容易就可以得出:
如果所坐的不是5人而是n人,写出第 n个人的年龄表达式。
2021/2/11
5
显然可以得到如下公式:
10n 1
f
(n)
f
(n 1) 2n 2
化简后的公式:
F(n)=10+(n-1)*2
2021/2/11
6
再来一个简单题:
2021/2/11
7
递推公式?
F(n)=(F(n-1)+1)*2
2、当有N封信的时候,前面N-1封信可以有 N-1或者 N-2封错装
3、前者,对于每种错装,可从N-1封信中任 意取一封和第N封错装,故=F(N-1)*(N-
4、1后) 者简单,只能是没装错的那封和第N封 交换信封,没装错的那封可以是前面N-1 封中的任意一个,故= F(N-2) * (N-1)
2021/2/11
2021/2/11
18
总结:递推求解的基本方法:
首先,确认:能否容易的得到简单情况的解?
然后,假设:规模为N-1的情况已经得到解 决最后。,重点分析:当规模扩大到N时,如何枚
举出所有的情况,并且要确保对于每一种子 情况都能用已经得到的数据解决。
强调: 1、编程中的空间换时间的思想 2、并不一定只是从N-1到N的分析
2021/2/11
8
Fibnacci 数列:
即:1、2、3、5、8、13、21、34…
2021/2/11
9
思考:
递推公式的伟大意义——? 有了公式,人工计算的方法? 常见的编程实现方法?(优缺点?)
2021/2/11
10
简单思考题:
在一个平面上有一个圆和n条直 线,这些直线中每一条在圆内同 其他直线相交,假设没有3条直 线相交于一点,试问这些直线将 圆分成多少区域。
2021/2/11
31
分析过程(4)
2.2、但是,难点在于,即使前面n-2个 人不是合法的队列,加上两个女生也有 可能是合法的,当然,这种长度为n-2 的不合法队列,不合法的地方必须是尾 巴,就是说,这里说的长度是n-2的不 合法串的形式必须是“F(n-4)+男+ 女”,这种情况一共有F(n-4).
f(n)=f(n-1)+f(n-2)+f(n-3); 其中f(1)=1,f(2)=2,f(3)=4
2021/2/11
27
最后一个思考题(有点难度)
2021/2/11
28
分析过程(1)
设:F(n)表示n个人的合法队列,则:
按照最后一个人的性别分析,他要么是男, 要么是女,所以可以分两大类讨论:
1、如果n个人的合法队列的最后一个人 是男,则对前面n-1个人的队列没有任何 限制,他只要站在最后即可,所以,这种 情况一共有F(n-1);
2021/2/11
11
是不是这个——
F(1)=2; F(n) = F(n-1)+n;
化简后: F(n) = n(n+1)/2 +1;
2021/2/11
12
太简单了?
来个稍微麻烦一些的☺
2021/2/11
13
例:(2050)折线分割平面
问题描述: 平面上有n条折线,问这些折线最多能将平面分割 成多少块?
2021/2/11
29
分析过程(2)
2、如果n个人的合法队列的最后一个 人是女,则要求队列的第n-1个人务必 也是女生,这就是说,限定了最后两 个人必须都是女生,这又可以分两种 情况:
2021/2/11
30
分析过程(3)
2.1、如果队列的前n-2个人是合法的队 列,则显然后面再加两个女生,也一定 是合法的,这种情况有F(n-2);
23
得到如下递推公式:
基本形式:d[1]=0; d[2]=1 递归式:d[n]= (n-1)*( d[n-1] + d[n-2])
这就是著名的错排公式☺
2021/2/11
24
思考题(2046):
在2×n的长方形方格中,用n个1×2的骨牌铺满方格, 例如n=3时,为2×3方格,骨牌的铺放方案有三种(如 图), 输入n ,输出铺放方案的总数
4
5
9 7 13
n=1 n=2
n=3
n=
4
F(1)=2
F(n)=F(n-1)+2(n-1)
2021/2/11
21
1465 不容易系列之一
某人写了n封信和n个信封,如果 所有的信都装错了信封。求所有 的信都装错信封,共有多少种不同 情况。
2021/2/11
22
分析思路:
1、当N=1和2时,易得解~,假设F(N-1)和 F(N-2)已经得到,重点分析下面的情况:
“佐罗”的烦恼
说起佐罗,大家首先想到的除了他脸上的面具, 恐怕还有他每次刻下的“Z”字。我们知道,一 个“Z”可以把平面分为2部分,两个“Z”可以 把平面分为12部分,那么,现在的问题是:如 果平面上有n个“Z”,平面最多可以分割为几部 分呢? 说明1:“Z”的两端应看成射线 说明2:“Z”的两条射线规定为平行的
2021/2/11
19
思考题:平面分割方法
问题的提出: 设有n条封闭曲线画在平面上,而任何
两条封闭曲线恰好相交于两点,且任何三 条封闭曲线不相交于同一点,问这些封闭 曲线把平面分割成的区域个数。
2021/2/11
20
简单分析——
2 1
14 23
8 1
5
3
2
4
6
7
14
6
10 11 3 12 2
1 8