NOIp2013普及组解题报告.pdfVIP

  • 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)

1亿VIP精品文档

相关文档