C. Mr. Perfectly Fine

time limit per test

2 seconds

memory limit per test

256 megabytes

Victor wants to become "Mr. Perfectly Fine". For that, he needs to acquire a certain set of skills. More precisely, he has 22 skills he needs to acquire.

Victor has nn books. Reading book ii takes him mimi minutes and will give him some (possibly none) of the required two skills, represented by a binary string of length 22.

What is the minimum amount of time required so that Victor acquires all of the two skills?

Input

The input consists of multiple test cases. The first line contains an integer tt (1≤t≤10001≤t≤1000) --- the number of test cases. The description of the test cases follows.

The first line of each test case contains an integer nn (1≤n≤2⋅1051≤n≤2⋅105) --- the number of books available.

Then nn lines follow. Line ii contains a positive integer mimi (1≤mi≤2⋅1051≤mi≤2⋅105) and a binary string of length 22, where si1=1si1=1 if reading book ii acquires Victor skill 11, and si1=0si1=0 otherwise, and si2=1si2=1 if reading book ii acquires Victor skill 22, and si2=0si2=0 otherwise.

It is guaranteed that the sum of nn over all test cases doesn't exceed 2⋅1052⋅105.

Output

For each test case, output a single integer denoting the minimum amount of minutes required for Victor to obtain both needed skills and −1−1 in case it's impossible to obtain the two skills after reading any amount of books.

Example

Input

Copy

复制代码

6

4

2 00

3 10

4 01

4 00

5

3 01

3 01

5 01

2 10

9 10

1

5 11

3

9 11

8 01

7 10

6

4 01

6 01

7 01

8 00

9 01

1 00

4

8 00

9 10

9 11

8 11

Output

Copy

复制代码
7
5
5
9
-1
8

Note

In the first test case, we can use books 22 and 33, with a total amount of minutes spent equal to 3+4=73+4=7.

In the second test case, we can use the books 11 and 44, with a total amount of minutes spent equal to 3+2=53+2=5.

In the third test case, we have only one option and that is reading book 11 for a total amount of minutes spent equal to 55.

解题说明:此题是一道模拟题,可以采用贪心算法,找出包含1和10的耗费最小时间组合或者是直接包含11的最小时间,两者进行比较即可。

cpp 复制代码
#include <stdio.h>

int main()
{
	int t = 0, n = 0, a = 0, s = 0;
	scanf("%d", &t);
	while (t--) 
	{
		scanf("%d", &n);
		int min_1 = 200005, min_2 = 200005, min_3 = 2000005;
		for (int i = 0; i < n; i++)
		{
			scanf("%d%d", &a, &s);
			if (1 == s && min_1 > a)
			{
				min_1 = a;
			}
			else if (10 == s && min_2 > a)
			{
				min_2 = a;
			}
			else if (11 == s && min_3 > a)
			{
				min_3 = a;
			}
		}
		if ((min_1 == 200005 || min_2 == 200005) && min_3 == 2000005)
		{
			printf("-1\n");
		}
		else if (min_1 + min_2 >= min_3)
		{
			printf("%d\n", min_3);
		}
		else
		{
			printf("%d\n", min_1 + min_2);
		}
	}
	return 0;
}
相关推荐
lizi8888823 分钟前
打包Python代码的常用方法实现程序exe应用
开发语言·python
api茶飘香1 小时前
守护应用边界:通过反射API实现安全的输入输出过滤
java·开发语言·python·安全·django·virtualenv·pygame
杀死一只知更鸟debug1 小时前
策略模式的小记
java·开发语言·策略模式
efls1111 小时前
Qt_了解Qt Creator
开发语言·qt
请揣满RMB1 小时前
Qt常用控件——QRadioButton和QCheckBox
开发语言·c++·qt
阿巴~阿巴~1 小时前
C_深入理解指针(五) —— sizeof和strlen的对比、数组和指针笔试题解析、指针运算笔试题解析
c语言·开发语言·数据结构·算法
爱吃桃子的ICer2 小时前
[UVM]3.核心基类 uvm_object 域的自动化 copy() compare() print() pack unpack
开发语言·前端·ic设计
ever_up9733 小时前
EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
java·开发语言·数据库
吴天德少侠4 小时前
c++返回一个pair类型
开发语言·c++
ok!ko4 小时前
设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)
java·开发语言·设计模式