CodeForces..学习读书吧.[简单].[条件判断].[找最小值]

题目描述:

CodeForces..学习读书吧.[简单].[条件判断].[找最小值]_第1张图片CodeForces..学习读书吧.[简单].[条件判断].[找最小值]_第2张图片


 题目解读:

给定一组数,分别是 “时间 内容”,内容分为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;
}

遇到的错误:

你可能感兴趣的:(CodeForces,算法,c++,开发语言)