题目描述:
题目解读:
给定一组数,分别是 “时间 内容”,内容分为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
- #include
- 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;
- }
遇到的错误: