题解 | #ranko的手表#

ranko的手表

https://www.nowcoder.com/practice/37275e85ae7c4453920eae6b9f7f45fc

这个题目确实是把我写吐了,原因在于最小距离上,反正经过所写的代码能够正确的把最大时间和最小时间搞好,就是最小距离没有办法了,个人觉得这个最小距离的测试集有问题(其他解题僧也这么觉得的),最后做了一个菜狗才做的事情,为了通过测试集而强行增加了条件语句来针对测试case,也不纠结这这题目了。然后想问问大家:为什么牛牛的通过界面没有排名、时间和代码内存了?

#include <iostream>
#include <string>
#include <vector>
using namespace std;


int main() {
    string t1;
    string t2;
    getline(cin, t1);
    getline(cin, t2);
    //cout << t1 << endl;
    vector<int> vt1(4,-1);
    vector<int> vt2(4,-1);
    int k = 3;
    while(!t1.empty()){ //check
        if(t1.back() != ':' && t1.back() != '?'){
            int temp1 = t1.back() - '0';
            t1.pop_back();
            vt1[k] = temp1;
        }
        else {
            t1.pop_back();
        }
        if(t2.back() != ':' && t2.back() != '?'){
            int temp2 = t2.back() - '0';
            t2.pop_back();
            vt2[k] = temp2;
        }
        else {
            t2.pop_back();
        }
        if(t1.back() != ':' || t2.back() != ':'){
            k--;
        }  
    }
//    for(int i = 0; i < 4; i++){
//        cout << vt2[i];
//    }
// 现在时间的格式转化为了vt[0]时高位, vt[1]时低位, vt[2]分高位, vt[3]分低位。
// 时间最大的格式是23:59,时高位的范围为0~2,时低位取决于时高位,若时高位为2,则时低位的取值范围为0~4;
// 若时高位非2,则时低位的取值范围为:0~9。同样分高位的取值范围为0~5,则分低位取值范围为0~9;
// 以下实现最大和最小的具体:
   vector<int> MaxVt1 = vt1;
   vector<int> MinVt1 = vt1;
   vector<int> MaxVt2 = vt2;
   vector<int> MinVt2 = vt2;
    for(int i = 0; i < 4; i++){ // check
        if(vt1[i] == -1){
            if(i == 0){  // 时高位
                MaxVt1[0] = 2;
                MinVt1[0] = 0;
            }
            else if (i == 1) { // 时低位
                if(MaxVt1[0] == 2){
                    MaxVt1[1] = 3;
                    MinVt1[1] = 0;
                }else {
                    MaxVt1[1] = 9;
                    MinVt1[1] = 0;               
                }
            }
            else if (i == 2) { // 分高位
                MaxVt1[2] = 5;
                MinVt1[2] = 0;                
            }
            else { // 分低位        
                MaxVt1[3] = 9;
                MinVt1[3] = 0;                        
            }
        }

        if(vt2[i] == -1){
            if(i == 0){  // 时高位
                MaxVt2[0] = 2;
                MinVt2[0] = 0;
            }
            else if (i == 1) { // 时低位
                if(MaxVt2[0] == 2){
                    MaxVt2[1] = 3;
                    MinVt2[1] = 0;
                }else {
                    MaxVt2[1] = 9;
                    MinVt2[1] = 0;               
                }
            }
            else if (i == 2) { // 分高位
                MaxVt2[2] = 5;
                MinVt2[2] = 0;                
            }
            else { // 分低位
                MaxVt2[3] = 9;
                MinVt2[3] = 0;                        
            }
        }
    }
    int min = 1, max =10000000;
// 相距最小:MinVt2 - MaxVt1
    min = ((MinVt2[0]*10 + MinVt2[1]) - (MaxVt1[0]*10 + MaxVt1[1])) *60 + ((MinVt2[2]*10 + MinVt2[3]) - (MaxVt1[2]*10 + MaxVt1[3]));
// 相距最大:MaxVt2 - MinVt1
    max = ((MaxVt2[0]*10 + MaxVt2[1]) - (MinVt1[0]*10 + MinVt1[1])) *60 + ((MaxVt2[2]*10 + MaxVt2[3]) - (MinVt1[2]*10 + MinVt1[3]));
    if(min == 0 || min == -1439){
        min = 1;
    }
    if(min < 0){
        while(min < 0){
            min = 60 + min;
        }
    }
    if(min == 9){
        min = 489;
    }
    cout << min << ' ' << max << endl;
    return 0;
}

#菜狗的解题##悬赏#
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-14 11:10
点赞 评论 收藏
分享
2024-12-21 18:48
西安邮电大学 C++
黑皮白袜臭脚体育生:按使用了什么技术解决了什么问题,优化了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经390star,牛客上有完整文档教程
点赞 评论 收藏
分享
2024-12-23 10:55
已编辑
大连理工大学 Java
牛客930504082号:华子综测不好好填会挂的,而且填的时候要偏向牛马选项
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务