倍速播放(多比特杯武汉工程大学第四届ACM程序设计竞赛同步赛)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

目前大多数的视频网站支持调节视频播放的速度,用户可以设置倍速来获得相对用户来说更好的观看体验。例如,一个原时长为30分钟的视频,用户设置成"2.0x"倍速后,仅需15分钟即可播放完毕。常见的视频播放倍速档有"0.25x"、"0.5x"、"0.75x"、"1.0x"、"1.25x"、"1.5x"、"1.75x"、"2.0x"  

给定原视频的播放时长和播放的倍速,请你计算出该视频在设置倍速后需要多长时间播放完毕。最后的结果四舍五入精确到秒。

输入描述:

输入有多组输入样例,每一组输入样例占一行。 

对于每一组输入样例,有两个字符串,中间用空格隔开。第一个字符串为原视频播放时长,第二个字符串为播放的倍速。 

第一个字符串有三种情况。 
第一种情况为播放时长不足 606060 秒。格式为 "0:S"。1≤S≤591 \le S \le 591≤S≤59, 如果 SSS 的十位为 000 需要在十位补 000。例如,"0:09"、"0:40"。 
第二种情况为播放时长大于等于606060秒但是不足111小时。格式为 "M:S"。1≤M≤591 \le M \le 591≤M≤59,0≤S≤590 \le S \le 590≤S≤59。 如果 SSS 的十位为 000 需要在十位补 000,如果 MMM 的十位为 000 则不需要在十位补 000。例如 "6:10"、"16:00" 
第三种情况为播放时长大于等于111小时。格式为 "H:M:S"。1≤H≤201 \le H \le 201≤H≤20,0≤M≤590 \le M \le 590≤M≤59,0≤S≤590 \le S \le 590≤S≤59。 如果 SSS 的十位为 000 需要在十位补 000,如果 MMM 的十位为 000 需要在十位补 000,如果 HHH 的十位为 000 则不需要在十位补 000。例如 "6:10:00"、"16:01:01" 


第二个字符串为以下888种情况下的一种:(不包含引号) 
"0.25x" 
"0.5x" 
"0.75x" 
"1.0x" 
"1.25x" 
"1.5x" 
"1.75x" 
"2.0x" 

本题保证输入数据的组数不超过 10610^6106

输出描述:

对于每一组测试数据,输出一行,111个字符串,代表在设置倍速后视频播放完毕所需要的时间。结果四舍五入精确到秒。输出的字符串的格式同输入的播放时长的字符串的格式。

输入

16:10 1.0x
20:00:00 0.5x

输出

16:10
40:00:00

题本身没什么,但提交后一直超时,问了问大佬有一个可以加速的东西,长见识了

std::ios::sync_with_stdio(false);

有一篇文章:

ios::sync_with_stdio(false)详解_一个爱浪费时间的人的博客-CSDN博客_ios::sync_with_stdio(false);

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	 string a,b;
	  int i,t[100];
	 std::ios::sync_with_stdio(false);
	 //while(scanf("%s%s",&a,&b)!=EOF)
	 while(cin>>a>>b)
{
	int j=0,pp=0;
	double sum;
	 for(i=0;i<a.size();i++)
	 {
	 	if(a[i]!=':'){pp=pp*10+a[i]-'0';
		 }
		 else if(a[i]==':'){t[j++]=pp;pp=0;}
		  if(i==a.size()-1){t[j++]=pp;pp=0;}
	 }
	 if(j==2)sum=t[0]*1.0*60.0+t[1]*1.0;
	 else if(j==3)sum=t[0]*1.0*3600.0+t[1]*1.0*60.0+t[2]*1.0;
	    if(b=="0.25x")sum=sum*4.0;
		else if(b=="0.5x")sum=sum*2.0;
		else if(b=="0.75x")sum=sum*4.0/3.0;
		else if(b=="1.25x")sum=sum*4.0/5.0;
		else if(b=="1.5x")sum=sum*2.0/3.0;
		else if(b=="1.75x")sum=sum*4.0/7.0;
		else if(b=="2.0x")sum=sum/2.0;
		 int ans1,ans2,ans3;
		 int ss=(long long int)(sum+0.5);
	 if(ss>=3600)
	 {
	 	ans1=ss/3600;
	 	ss=ss%3600;
	 	ans2=ss/60;
	 	ans3=ss%60;
	 	printf("%d:%02d:%02d\n",ans1,ans2,ans3);
	 }
	 else if(ss<3600&&ss>=60)
	 {
	 	ans1=ss/60;
	 	ans2=ss%60;
	 	printf("%d:%02d\n",ans1,ans2);
	 }
	 else if(ss<60)
	 {
	 	printf("0:%02d\n",ss);
	 }
}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值