90分wa9测试点 求助

P5707 【深基2.例12】上学迟到

woyuan @ 2024-08-28 11:41:57

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int sj=10,s,u,y;
    cin>>s>>u;
    sj=sj+s/u; 
    y=480-sj;
    if(sj>=480)
    y=1440+y;
    sj=y/60;
    y=y%60;
    if(y>9&&sj>9)
    cout<<sj<<":"<<y-1;
    else if(y<9&&sj>9)  
    cout<<sj<<":"<<0<<y-1;
    else if(y<9&&sj<9)
    cout<<0<<sj<<":"<<0<<y-1;
    else
    cout<<0<<sj<<":"<<y-1;
    return 0;
 } 

by CCF___NOI @ 2024-08-28 12:01:43

@woyuan 是不是没判断前一天??? 我一次过也不知道9测试点数据是啥

#include<bits/stdc++.h>
using namespace std;
long long n,m,s,t,v;
int main(){
    cin>>s>>v;
    t=ceil(s*1.0/v)+10;
    if(t<=480)
        printf("%02d:%02d",(480-t)/60,(480-t)%60);
    else
        printf("%02d:%02d",(1440+480-t)/60,(1440+480-t)%60);
    return 0;
}

by CCF___NOI @ 2024-08-28 12:04:08

@woyuan 少用CIN和COUT,太慢 多用PRINTF,很快; 不用endl,用"\0";


by maxwr168 @ 2024-08-28 12:06:06


#include<bits/stdc++.h>
using namespace std;
int main() {
    int s, v, t, h, m;
    cin >> s >> v;
    t = s / v + 10;
    if (s % v != 0)
        t += 1;
    h = 8 - t / 60;
    m = 0 - t % 60;
    if (m < 0) {
        m += 60;
        h--;
    }
    if (h < 0)
        h += 24;
    printf("%02d:%02d", h, m);
    return 0;
}

by mengmeng123456 @ 2024-08-28 12:08:59

我好像找到一个hack数据

输入:10000 10000

我过了的程序输出的是07:49

我用你程序是07:48


by maxwr168 @ 2024-08-28 12:11:39

@woyuan
你代码没有判断剩下的时间是否大于一天,如果大于一天需要减去一天的时间,所以必须向上取整,不然行走时间就会少,所以没过。(求关)


by mengmeng123456 @ 2024-08-28 12:19:29

@woyuan 最后的输出可以用

printf("%02d:%02d",[变量名],[变量名]);

%02d的意思就是输出两位整数,不足两位可以自动补零


by mengmeng123456 @ 2024-08-28 12:23:05

@woyuan 你那个y为什么要减1呢


by mengmeng123456 @ 2024-08-28 12:36:09

我找到你错的地方了,

sj=sj+s/u

这一行,s/u应该向上取整,因为比如说样例一,yyy的速度是99米每分钟,距离学校100米第一分钟只能走99米,离学校还有1米,这一米我们要按一分钟处理,向上取整可以用函数

ceil()

还有s和u是整数类型,没有转换的情况下,s/u是自动向下取整,所以要先强制转换成小数形式,可以写成

s*1.0/u

这样就可以完成强制转换了


by mengmeng123456 @ 2024-08-28 13:11:01

差点忘了,y-1要改成y


by woyuan @ 2024-08-29 11:32:12

@mengmeng123456 改了之后只有9测试点ac 为什么?help me


| 下一页