题目描述:
题目解读:
给定一组数,分别是 “时间 内容”,内容分为00,01,10,11四种,求能够得到11的最小时间。
解题思路:
看似00,01,10,11像二进制数,但是用不到相关概念。
其中00是没有价值的,需要分别找到01,10和11的最小时间,然后比较(01+10)和11哪个所需时间更小,然后输出最小。
即先输入字符串s,
如果s[0]=='1'&&s[1]=='0',用min()函数判断是否是10的最小时间;
s[0]=='0'&&s[1]=='1',用min()函数判断是否是01的最小时间;
s[0]=='1'&&s[1]=='1',用min()函数判断是否是11的最小时间;
最后用min()函数输出 01和10的最小时间和 与 11最小时间 的最小值。
如果用来记录01,10的值没有都改变,11的值也未改变,则输出-1。
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<iostream>
using namespace std;
void Solve() {
int n,time,a = 1e6, b = 1e6, c = 1e6;
string s;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
cin>>time>>s;
if (s[0] == '1' && s[1] == '0') {a = min(time, a);}
if (s[1] == '1' && s[0] == '0') {b = min(time, b);}
if (s[0] == '1' && s[1] == '1') {c = min(time, c);}
}
if (a != 1e6 && b != 1e6 || c!= 1e6) {printf("%d\n",min(a+b,c));}
else { puts( "-1\n" ); }
return;
}
int main() {
int t;
scanf("%d", &t);
while (t--) Solve();
return 0;
}
遇到的错误: