题解 | #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; }#菜狗的解题##悬赏#