题目描述

总所周知,计算器可以拿来干很多它本不应该干的事情,比如写作文。(参看洛谷P2549)

小A发现了一个计算器的另一个隐藏功能——弹琴。

http://www.bilibili.com/video/av2205500/

如果按上一个键,比如说1,就会发出中音“Do”。

这边给出按键音高表

  1. + 低音Fa
  2. < 低音So
  3. * 低音La
  4. / 低音Xi
  5. 1 中音Do
  6. 2 中音Re
  7. 3 中音Mi
  8. 4 中音Fa
  9. 5 中音So
  10. 6 中音La
  11. 7 高音Xi
  12. 8 高音Do
  13. 9 高音Re
  14. = 高音Mi
  15. % 高音Fa
  16. C 高音So
  17. M 高音La

现在小A搞到了一份乐谱——我们称为计算器谱,一种变形的简谱。

时值(也就是按的时间长度)是这么记录的,例如:

1 是四分音符,占1拍。

1- 是二分音符,占2拍。

1--- 是全音符,占四拍。

对于小于四分音符的音符,我们用嵌套括号表示,例如

(1(34(56))2)

1和2在一层括号中,是八分音符,占0.5拍。

3和4在两层括号中,是16分音符,占0.25拍。

5和6在三层括号中,是32分音符,占1/8拍。当然实际上比较少见。

括号中不会出现‘-’这个符号。

不会出现四层或以上的括号。

在一个音符后面添加一个附点即“.”表示这个音符延长1/2倍。

例如 1-.是3拍,1.是1.5拍,(3.(45.))3是3/4拍,4是1/4拍,5是3/8拍。

附点不会连续添加两个或以上,也不会出现超过四拍的音符。

不考虑其他的乐理符号。

另外整个乐谱会给一个速度,整数,意思是一分钟多少拍。

为了美观,乐谱可以随便换行、添加空格。这个忽略即可。

现在小A想知道,按完这个谱子,需要多少时间(单位:秒)

输入输出格式

输入格式:

第一行,两个整数n,T,表示谱子行数以及速度(拍每分)

接下来n行,给出乐谱。

输出格式:

一个整数,表示演奏需要花费的时间,单位秒,舍去小数部分。

输入输出样例

输入样例#1:

  1. 2 60
  2. 3345 5432 1123 322-
  3. 3345 5432 1123 211-
输出样例#1:

  1. 32
  2. (一共32拍,每分钟60拍,所以是32秒。对了,这是欢乐颂的开头部分)
输入样例#2:

  1. 5 120
  2. 3(1.(3))55 8(7.(6))65 655(3.(1)) (4.(4))32-
  3. 3(1.(2))35 8(7.(6))65 655(4.(3)) (2.(3))21-
  4. 2.(3)44 6(6.(6))(5.(4))3 3.(5)88 (9.(8)7.(6))5-
  5. =.(=)(9.(8))7 9.(8)(7.(6))5 8(856543) (2.(3))43-
  6. =.(=)(9.(8))7 9.(8)(7.(6))5 8(857654) (3.(4))21-
输出样例#2:

  1. 40
  2. (一共80拍,别问我怎么数的,一分钟120拍的话,是40秒。至于这是什么曲子?根据相关的法律政策,该部分未予显示。)

说明

http://bd.kuwo.cn/yinyue/4641527

对于40%的数据,没有附点没有括号

对于100%的数据,括号层数不会超过3层,不超过100行,每行不超过100个字符。

对于其中的一个数据,是《千本樱》。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. using namespace std;
  6. char c;
  7. int n,t;
  8. int sta=;
  9. int cnt=,ans=;
  10. int la=,now=;
  11. int main()
  12. {
  13. scanf("%d%d\n",&n,&t);
  14. while (cin>>c)
  15. {
  16. if (c==' '||c=='\n') now=; else
  17. if (c=='(') now/=;
  18. else if (c==')') now*=;
  19. else if (c=='.') cnt+=now/;
  20. else if (c=='-')
  21. {
  22. cnt+=now;
  23. la++;
  24. }else cnt+=now;
  25. }
  26. t*=;
  27. ans=cnt*/t;
  28. cout<<ans;
  29. return ;
  30. }

也许是因为精度,这个代码没过

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<math.h>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<string.h>
  7. using namespace std;
  8. int n,t,nn;
  9. char c;
  10. double tot,last=;
  11. int main()
  12. {
  13. scanf("%d%d",&n,&t);
  14. scanf("%c",&c);
  15. for(int i=;i<=;i++)
  16. {
  17. if(nn==n) break;
  18. scanf("%c",&c);
  19. if(c>=''&&c<='')
  20. {
  21. tot+=last;
  22. continue;
  23. }
  24. if(c==' '||c=='\n')
  25. {
  26. last=;
  27. if(c=='\n') nn++;
  28. continue;
  29.  
  30. }
  31. if(c=='(')
  32. {
  33. last/=;
  34. continue;
  35. }
  36. if(c==')')
  37. {
  38. last*=;
  39. continue;
  40. }
  41. if(c=='.')
  42. {
  43. tot+=last/;
  44. continue;
  45. }
  46. if(c=='-')
  47. {
  48. tot++;last=;
  49. continue;
  50.  
  51. }
  52. tot+=last;
  53. }
  54. tot=(double)tot/(t/);
  55. cout<<tot;
  56. return ;
  57. }

P2614 计算器弹琴的更多相关文章

  1. 洛谷 P2614 计算器弹琴

    P2614 计算器弹琴 题目描述 总所周知,计算器可以拿来干很多它本不应该干的事情,比如写作文.(参看洛谷P2549) 小A发现了一个计算器的另一个隐藏功能——弹琴. http://www.bilib ...

  2. 1.C#WinForm基础制作简单计算器

    利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...

  3. 自己动手写计算器v1.1

    这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...

  4. 自己动手写计算器v1.0

    今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...

  5. 【IOS开发笔记03-视图相关】简单计算器的实现

    UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...

  6. [LeetCode] Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  7. JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  8. 由ArcMap属性字段自增引出字段计算器使用Python的技巧

    1.前言       前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQL Server中对于数值型字段可以设置自增.所以我打开ArcCatalog查看发现只提供默认值 ...

  9. 前端学PHP之面向对象系列第六篇——简单图形面积计算器实现

    前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?php abstract class Shape{ public $name; abs ...

随机推荐

  1. UISegmentedControl方法与属性的总结

    SegmentedControl又被称作分段控制器,是IOS开发中经常用到的一个UI控件. 初始化方法:传入的数组可以是字符串也可以是UIImage对象的图片数组 - (instancetype)in ...

  2. 使用delphi 开发多层应用(十六)使用XMLRPC 实现basic4android 远程调用RTC服务(讲述了RTC的特点,其底层通讯协议是自己封装SOCK 库,与kbmmw 的适合场合不完全一样)

        RealThinClient (以下简称RTC) 也是一款delphi 多层开发的框架,由于其底层通讯协议是自己封装SOCK 库,抛弃了 大家诟病的indy,因此表现的非常稳定,效率也非常高, ...

  3. python模拟登陆discuz论坛

    #! /usr/bin/env python # -*- coding: utf-8 -*- import urllib2, urllib, cookielib, re, time class Rob ...

  4. HDU3045 Picnic Cows —— 斜率优化DP

    题目链接:https://vjudge.net/problem/HDU-3045 Picnic Cows Time Limit: 8000/4000 MS (Java/Others)    Memor ...

  5. Oracle:exp导出exp-00091问题

    今天导出一数据库数据,发现EXP-00091问题: 连接到: Oracle Database 10g Enterprise Edition Release - Production With the ...

  6. ASP.NET统计图表控件

    近来客户需要将前段时间开发的统计信息用图表展示出来,还要多个图表类型,例如:柱状图.饼图.曲线图.三维图等等.在网上google了一下,发现了三个(也许更多)可以使用的控件.下面我们一起看看这三个控件 ...

  7. [Java] 读取文件

    1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如 ...

  8. BZOJ_3049_[Usaco2013 Jan]Island Travels _状压DP+BFS

    BZOJ_3049_[Usaco2013 Jan]Island Travels _状压DP+BFS Description Farmer John has taken the cows to a va ...

  9. 我自己常用的Watir自动化测试结果报表

    特别声明:该报表框架不是我搭建的.

  10. CS231n 2016 通关 第二章-KNN 作业分析

    KNN作业要求: 1.掌握KNN算法原理 2.实现具体K值的KNN算法 3.实现对K值的交叉验证 1.KNN原理见上一小节 2.实现KNN 过程分两步: 1.计算测试集与训练集的距离 2.通过比较la ...