链接:登录—专业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;
}