- 5
- 0
- 约9.52千字
- 约 11页
- 2018-04-10 发布于河南
- 举报
NOIp2013普及组解题报告
NOIp2013普及组 解题报告 By 绍兴文理学院附中 任轩笛
NOIp2013普及组
解题报告
By 绍兴文理学院附中 任轩笛
NOIp2013普及组 解题报告 By 绍兴文理学院附中 任轩笛
NOIp2013普及组 解题报告 By 绍兴文理学院附中 任轩笛
计数问题
(count.pas/c/cpp)
TimeLimit:1000Ms MemoryLimit:131072K
算法一
这是一题送分题。
初看这道题,你想到了什么?对了,NOIp2010普及组《数字统计》。几乎就是一模一样
的题目。一看数据范围,n不是很大,直接上线性复杂度的扫描算法。
算法具体就是对于每一个数字转成字符串后扫描字符串,统计数字个数即可。
PASCAL代码见此。
时间效率 O(N)
空间效率 O(1)
算法二
如果对时间效率实在不放心,也可以用数学方法来完成。但相对复杂了一点。通常NOIp
普及组的第一题用不着太高科技的算法。
时间效率 O(1)
空间效率 O(1)
代码_算法一
01 var x,i,j,k,l,m,n,Ans:Longint;
02 s:Ansistring;
03 Begin
04 Assign(input,count.in);
05 Assign(output,count.out);
06 Reset(input);
07 rewrite(output);
08 Readln(n,x);
09 For i:=1 to N do
10 Begin
11 str(i,s);
12 For j:=1 to Length(s) do
13 If ord(s[j])-48=x then Inc(Ans);
14 End;
15 writeln(Ans);
16 Close(input);
17 Close(output);
18 End.
NOIp2013普及组 解题报告 By 绍兴文理学院附中 任轩笛
NOIp2013普及组 解题报告 By 绍兴文理学院附中 任轩笛
表达式求值
(expr.pas/c/cpp)
TimeLimit:1000Ms MemoryLimit:131072K
算法一
表达式求值的题目已经堪称经典了。如果读者尝试过NOIp2005提高组《等价表达式》,
那么这道题目其实非常轻松。
对于一般的(甚至更复杂的)表达式求值的题目,我们一般采用如下方法:
1、设两个栈:符号栈与数字栈;
2、扫描表达式,遇到数字则进栈,遇到符号则转第3步,扫描完毕转第4步;
3、遇到符号:首先将符号栈中优先级比当前符号大的都弹出,每次取出数字栈顶两个元
素,求值后压入数字栈。然后将当前符号压入符号栈。转第2步;
4、扫描完毕后数字栈顶便是所求的值。
对于本题,只要输出最后4位,由于只包含“”和 “*”,因此可以边处理边mod,甚至
根本不用设置栈,直接先算出所有 “*”出的值,然后依次相加即可,只不过没有设置栈的方
法简单。
PASCAL代码见此。
时间效率 O(Len) //其中Len为表达式的位数
空间效率 O(Len)
NOIp2013普及组 解题报告 By 绍兴文理学院附中
原创力文档

文档评论(0)