ACM培训精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OLE (Output Limit Exceed) 输出超界 (一般 不太常见,除非你输出了超过 1024K ...)
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
F Software
名字和专业用%s读,性别怎么办?
ACM 培训
输入输出处理 需要掌握的知识 参考资料
常用术语
ICPC (International Collegiate Programming Contest) 国际大学生程序设计竞赛
AC (Accepted) 程序通过 WA (Wrong Answer) 错误的答案
(读做“哇”)
PE (Presentation Error) 输出格式错误
自己过滤空格?麻烦!
输入输出
读一个非空白字符, 方法一:
char str[2]; scanf(“%1s”, str); // %1s扫描前导空白,并且只读一个字符 char c = str[0]; 方法二: 强制扫描空白 在%前面加上一个空格表示“强制扫描前导空白” scanf(“ %c”, &ch); 前面那个读人物信息的完整scanf语句:
scanf(“%s %c %s”, name, &gender, ability);
输入输出
同理,我们也可以用其它字符来扫描其它类型 的无关输入
比如,输入年月日的信息
2007-08-03 scanf(“%d-%d-%d”, &y, &m, &d); 其它类似
浮点数的输入问题
为什么说while(in!=0.00)不合理呢? 如果不合理应该怎么判断!!
RE (Runtime Error) 程序执行错误 (常见于数 组溢出、递归层数太多 ...)
CE (Compile Error) 编译错误
MLE (Memory Limit Exceeded) 内存超界 (正 式比赛没有内存限制,但如果用太多可能 RE)
TLE (Time Limit Exceed) 程序超时错误 (死 循环或算法有问题)
while(scanf("%d %d", &a, &b) != EOF) {
.... } while(cin >> a >> b) {
....
4.输入是一整行的字符串的
char buf[255]; gets(buf);
char buf[255]; cin.getline(buf, 255);
输出部分:
.... }
2.输入不说明有多少个Input Block,但以某个特 殊输入为结束标志
while(scanf("%d", &n) != EOF && n != 0) or whilewhile(cin >> n && n != 0) {
.... }
3.输入不说明有多少个Input Block,以EOF为结束标志
while(in!=0.00)是不太好,浮点数的判断不能 这样比较,因为牵涉到精度的问题
应该用 e = in - num,然后判断e
输入输出的技巧
输入输出的问题: 输入部分: 1.输入一开始就会说有N个Input Block,下面接着是N
个Input Block
scanf("%d", &n);or cin >> n; for(i=0; i<n; i++) {
1.一个Input Block对应一个Output Block,Output Block之间 没有空行
... printf("%d\n", ans); ... ... cout << ans << endl; ...
2.一个Input Block对应一个Output Block,Output Block之间有空行。 int casenum = 0; ... { if (casenum++) putchar('\n'); ... printf("%d\n", ans); } int casenum = 0; ... { if (casenum++) cout << endl; ... cout << ans << endl; }
C和C++的输入输出混合使用
至于cout的缓存问题,五种情况会刷缓冲: \n(我试下来是要刷的) endl flush 缓冲区满 程序结束
输入输出
#include <stdio.h> #include <iostream.h> int main() {
for(int j=0; j<5; j++) {
LCS (Longest Common Subsequence) 最长 公共子串
输入输出
C:
scanf printf
C++:
cin cout
速度快 格式容易控制
使用简单, 自动识别类型 格式控制较麻烦
数据规模较大时, 推荐(必须)使用scanf 以 避免超时(TLE)Fra bibliotek输入输出
cout: 带缓冲输出 printf: 不带缓冲输出
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
F Software
名字和专业用%s读,性别怎么办?
ACM 培训
输入输出处理 需要掌握的知识 参考资料
常用术语
ICPC (International Collegiate Programming Contest) 国际大学生程序设计竞赛
AC (Accepted) 程序通过 WA (Wrong Answer) 错误的答案
(读做“哇”)
PE (Presentation Error) 输出格式错误
自己过滤空格?麻烦!
输入输出
读一个非空白字符, 方法一:
char str[2]; scanf(“%1s”, str); // %1s扫描前导空白,并且只读一个字符 char c = str[0]; 方法二: 强制扫描空白 在%前面加上一个空格表示“强制扫描前导空白” scanf(“ %c”, &ch); 前面那个读人物信息的完整scanf语句:
scanf(“%s %c %s”, name, &gender, ability);
输入输出
同理,我们也可以用其它字符来扫描其它类型 的无关输入
比如,输入年月日的信息
2007-08-03 scanf(“%d-%d-%d”, &y, &m, &d); 其它类似
浮点数的输入问题
为什么说while(in!=0.00)不合理呢? 如果不合理应该怎么判断!!
RE (Runtime Error) 程序执行错误 (常见于数 组溢出、递归层数太多 ...)
CE (Compile Error) 编译错误
MLE (Memory Limit Exceeded) 内存超界 (正 式比赛没有内存限制,但如果用太多可能 RE)
TLE (Time Limit Exceed) 程序超时错误 (死 循环或算法有问题)
while(scanf("%d %d", &a, &b) != EOF) {
.... } while(cin >> a >> b) {
....
4.输入是一整行的字符串的
char buf[255]; gets(buf);
char buf[255]; cin.getline(buf, 255);
输出部分:
.... }
2.输入不说明有多少个Input Block,但以某个特 殊输入为结束标志
while(scanf("%d", &n) != EOF && n != 0) or whilewhile(cin >> n && n != 0) {
.... }
3.输入不说明有多少个Input Block,以EOF为结束标志
while(in!=0.00)是不太好,浮点数的判断不能 这样比较,因为牵涉到精度的问题
应该用 e = in - num,然后判断e
输入输出的技巧
输入输出的问题: 输入部分: 1.输入一开始就会说有N个Input Block,下面接着是N
个Input Block
scanf("%d", &n);or cin >> n; for(i=0; i<n; i++) {
1.一个Input Block对应一个Output Block,Output Block之间 没有空行
... printf("%d\n", ans); ... ... cout << ans << endl; ...
2.一个Input Block对应一个Output Block,Output Block之间有空行。 int casenum = 0; ... { if (casenum++) putchar('\n'); ... printf("%d\n", ans); } int casenum = 0; ... { if (casenum++) cout << endl; ... cout << ans << endl; }
C和C++的输入输出混合使用
至于cout的缓存问题,五种情况会刷缓冲: \n(我试下来是要刷的) endl flush 缓冲区满 程序结束
输入输出
#include <stdio.h> #include <iostream.h> int main() {
for(int j=0; j<5; j++) {
LCS (Longest Common Subsequence) 最长 公共子串
输入输出
C:
scanf printf
C++:
cin cout
速度快 格式容易控制
使用简单, 自动识别类型 格式控制较麻烦
数据规模较大时, 推荐(必须)使用scanf 以 避免超时(TLE)Fra bibliotek输入输出
cout: 带缓冲输出 printf: 不带缓冲输出