CSP考试技巧final
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CSP考试技巧
2014-12-11
目标
看看,证明自己,挑战自己,…… 最高目标:得高分
不丢分 骗分 有效策略 实战
丢分
ቤተ መጻሕፍቲ ባይዱ丢分是应得的分数没得到
主要是因不了解或不细心而导致的
注意 1:按题目要求输入输出
输出多余的提示
例:输入A、B,输出一个数A+B 错误:cout << “答案是:” << a+b ; 正确:cout << a+b ; 例:若无解,输出“No Solution!” 错误:cout << “no solution!”; 错误:cout <<“No Solution”; 正确:cout <<“No solution!”;
不注意大小写
注意 2:假设输入数据符合要求
假设评测时所给的输入满足输入格式的要求, 而且数据范围符合数据的说明,不需要编制对 输入进行正确性判断的语句。 CSP考察的是编程能力,不是软件的鲁棒性
错误:if (n>10000) cout<<“error!”;
注意3:数据范围
不能每道题都要AC 100 + 100 + 0 < 70 + 70 +70
从易到难
按照自己的难易程度,KISS 注意时间
第三步:各个击破
想好算法再写代码 写完之后,通读一遍,检查小错误
测试一般比编程花时间
每道题做完,马上测试
才编完程序,最容易发现问题;越到最后,越不能发现 问题,甚至可能把对的当成错的;就算最后发现问题, 也未必能改正确 设计数据:样例数据、极限数据、特殊数据、随机数据 单步跟踪;输出中间结果; 对拍……
考试心态
拿分快乐
1道题会,太正常了;确保做对这道题 会做2~3道题,谨慎高兴,题目可能有陷阱 5道题都不会,没关系,肯定大部分人都不会;挑 送分多的题先做; 写随机数程序/卡时程序 写代码框架 故意吓人
心慌:其它选手敲键盘、交卷、……
实战
CSP第一次认证考试 练习OJ
注意5:编译环境
CSP的C++编译器是Mingw,版本应是5。 #include 问题
Visual C++:#include <stdafx>,提交报错; 解决方案:不包含Microsoft自带的头文件 DevC++:隐含了一些标准文件,提交报错; 解决方案:补全头文件;或者写成头文件模板;
骗分4:随机贪心(非完美算法)
原理
贪心不一定是最优解,往往是极优解; 随机可以跳出局部极值; 启发式搜索,模拟退火,遗传算法,群智能等 初始化,要选的堆0个物品,不选的堆全部物品; 然后随机从不选的那堆拿一个到要选的那堆,如果 超重就随机拿一个出来。每次都记录一个最大值; 反复操作若干次(rp,卡时)。
打开 阅读器 / 文本编辑器 / 画图 / 计算器 等 把题目的重点 标/粘 出来 不懂,看样例,弄懂;懂了,看样例,检验;看完 样例都不懂,果断放弃 设计算法:典型题;难题猜想(尝试几组数据); 估算 时 /空 效率,估算得分情况;
共大约30~60分钟
第二步:易难定序
分数最大化
数据输入不正确
例:求a+b,a,b<=10^18 错误:int a,b; cout<<a+b<<endl;
计算结果范围不正确
例:求 n!, n<15 错误:int ans=1; for(i=1;i<=n;i++) ans*=i;
2147483647 long long : 2*10^9 10^18
注意整数的范围
//C语言:I64d
注意 4:时空限制
超时:1 S ~ 10^8 次基础运算+-*/
例:对输入的n个数进行排序,n <= 10^6 冒泡排序,有数据点超时,不能得满分 快速排序,不超时
爆空间:256 M ~ 2*10^8 Byte
int a[100000000]; int b[10000][10000]; int a[100005]; //够用时多开几个,防止下标越界
main函数的返回类型是int ;
骗分
……遇到不会的题怎么办呢???放弃??? 让100 分就这样流去???当然不能放弃。 ——《骗分导论》
骗分的基本条件
基于数据的自动评测 有部分分 (OI的方式,与ACM相对)
骗分1:输出一个固定值
题目要求:无解时输出“No”之类的,输出 “NO” 样例数据 分析猜测可能性较大的值
例:约瑟夫环 输出1
骗分2:分类讨论
题目都有极限数据; 题目往往有特殊数据,如一些数据是升序,降 序排列或全部相等;
如果这道题不能AC,那可以考虑只解决这些 极限数据和特殊数据,测试数据中往往会出现 几个,那也是几十分;
骗分3:打表
建立一张输入输出对应表格;
数据很小,可人工算出,直接在程序中打表 搜索好写时,可以搜出所有输入数据对应的解 ,并打到文件里;然后在程序中,开一个常量 数组,打表;注意文件的大小(不超64K)
例:0-1背包问题
骗分小结
组合骗分:几种方法混合用 会做才是硬道理。骗分的最高境界就是不骗分 ——算法导论
有效策略
不好的策略
5道题都去做,却不拿分(没有重点) 1道题花费超过1.5小时的时间(不果断)
有效策略
确保拿分的策略 大牛/神犇 除外
第一步 通读试题
读懂分析每道题
wikioi rqnoj
Questions?
2014-12-11
目标
看看,证明自己,挑战自己,…… 最高目标:得高分
不丢分 骗分 有效策略 实战
丢分
ቤተ መጻሕፍቲ ባይዱ丢分是应得的分数没得到
主要是因不了解或不细心而导致的
注意 1:按题目要求输入输出
输出多余的提示
例:输入A、B,输出一个数A+B 错误:cout << “答案是:” << a+b ; 正确:cout << a+b ; 例:若无解,输出“No Solution!” 错误:cout << “no solution!”; 错误:cout <<“No Solution”; 正确:cout <<“No solution!”;
不注意大小写
注意 2:假设输入数据符合要求
假设评测时所给的输入满足输入格式的要求, 而且数据范围符合数据的说明,不需要编制对 输入进行正确性判断的语句。 CSP考察的是编程能力,不是软件的鲁棒性
错误:if (n>10000) cout<<“error!”;
注意3:数据范围
不能每道题都要AC 100 + 100 + 0 < 70 + 70 +70
从易到难
按照自己的难易程度,KISS 注意时间
第三步:各个击破
想好算法再写代码 写完之后,通读一遍,检查小错误
测试一般比编程花时间
每道题做完,马上测试
才编完程序,最容易发现问题;越到最后,越不能发现 问题,甚至可能把对的当成错的;就算最后发现问题, 也未必能改正确 设计数据:样例数据、极限数据、特殊数据、随机数据 单步跟踪;输出中间结果; 对拍……
考试心态
拿分快乐
1道题会,太正常了;确保做对这道题 会做2~3道题,谨慎高兴,题目可能有陷阱 5道题都不会,没关系,肯定大部分人都不会;挑 送分多的题先做; 写随机数程序/卡时程序 写代码框架 故意吓人
心慌:其它选手敲键盘、交卷、……
实战
CSP第一次认证考试 练习OJ
注意5:编译环境
CSP的C++编译器是Mingw,版本应是5。 #include 问题
Visual C++:#include <stdafx>,提交报错; 解决方案:不包含Microsoft自带的头文件 DevC++:隐含了一些标准文件,提交报错; 解决方案:补全头文件;或者写成头文件模板;
骗分4:随机贪心(非完美算法)
原理
贪心不一定是最优解,往往是极优解; 随机可以跳出局部极值; 启发式搜索,模拟退火,遗传算法,群智能等 初始化,要选的堆0个物品,不选的堆全部物品; 然后随机从不选的那堆拿一个到要选的那堆,如果 超重就随机拿一个出来。每次都记录一个最大值; 反复操作若干次(rp,卡时)。
打开 阅读器 / 文本编辑器 / 画图 / 计算器 等 把题目的重点 标/粘 出来 不懂,看样例,弄懂;懂了,看样例,检验;看完 样例都不懂,果断放弃 设计算法:典型题;难题猜想(尝试几组数据); 估算 时 /空 效率,估算得分情况;
共大约30~60分钟
第二步:易难定序
分数最大化
数据输入不正确
例:求a+b,a,b<=10^18 错误:int a,b; cout<<a+b<<endl;
计算结果范围不正确
例:求 n!, n<15 错误:int ans=1; for(i=1;i<=n;i++) ans*=i;
2147483647 long long : 2*10^9 10^18
注意整数的范围
//C语言:I64d
注意 4:时空限制
超时:1 S ~ 10^8 次基础运算+-*/
例:对输入的n个数进行排序,n <= 10^6 冒泡排序,有数据点超时,不能得满分 快速排序,不超时
爆空间:256 M ~ 2*10^8 Byte
int a[100000000]; int b[10000][10000]; int a[100005]; //够用时多开几个,防止下标越界
main函数的返回类型是int ;
骗分
……遇到不会的题怎么办呢???放弃??? 让100 分就这样流去???当然不能放弃。 ——《骗分导论》
骗分的基本条件
基于数据的自动评测 有部分分 (OI的方式,与ACM相对)
骗分1:输出一个固定值
题目要求:无解时输出“No”之类的,输出 “NO” 样例数据 分析猜测可能性较大的值
例:约瑟夫环 输出1
骗分2:分类讨论
题目都有极限数据; 题目往往有特殊数据,如一些数据是升序,降 序排列或全部相等;
如果这道题不能AC,那可以考虑只解决这些 极限数据和特殊数据,测试数据中往往会出现 几个,那也是几十分;
骗分3:打表
建立一张输入输出对应表格;
数据很小,可人工算出,直接在程序中打表 搜索好写时,可以搜出所有输入数据对应的解 ,并打到文件里;然后在程序中,开一个常量 数组,打表;注意文件的大小(不超64K)
例:0-1背包问题
骗分小结
组合骗分:几种方法混合用 会做才是硬道理。骗分的最高境界就是不骗分 ——算法导论
有效策略
不好的策略
5道题都去做,却不拿分(没有重点) 1道题花费超过1.5小时的时间(不果断)
有效策略
确保拿分的策略 大牛/神犇 除外
第一步 通读试题
读懂分析每道题
wikioi rqnoj
Questions?