这个题目确实是把我写吐了,原因在于最小距离上,反正经过所写的代码能够正确的把最大时间和最小时间搞好,就是最小距离没有办法了,个人觉得这个最小距离的测试集有问题(其他解题僧也这么觉得的),最后做了一个菜狗才做的事情,为了通过测试集而强行增加了条件语句来针对测试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;
}

京公网安备 11010502036488号