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;
}
相关推荐
一刻钟.5 分钟前
DataGridView和定时器
开发语言·c#
学嵌入式的六子6 分钟前
如何使用VScode开发STM32【喂饭级教程】-全过程讲解
c语言·ide·vscode·stm32·单片机·嵌入式硬件
墨辰JC12 分钟前
C语言可变参数讲解:stdarg.h应用
c语言·开发语言·蓝桥杯·内存·蓝桥杯嵌入式
Larry_Yanan17 分钟前
Qt多进程(八)消息队列(基于文件)
开发语言·qt
毕设源码-钟学长20 分钟前
【开题答辩全过程】以 基于java旅游网站的设计与实现为例,包含答辩的问题和答案
java·开发语言·旅游
0和1的舞者23 分钟前
接口自动化测试详解(二):requests 请求封装与 Pytest 框架全实战
开发语言·自动化测试·python·测试开发·接口·测试
C语言小火车23 分钟前
C++右值引用与转移语义详解
c语言·开发语言
CoderCodingNo1 小时前
【GESP】C++五级真题(数论考点) luogu-P11961 [GESP202503 五级] 原根判断
开发语言·c++
乾元1 小时前
网络切片的自动化配置与 SLA 保证——5G / 专网场景中,从“逻辑隔离”到“可验证承诺”的工程实现
运维·开发语言·网络·人工智能·网络协议·重构
代码游侠1 小时前
应用——Web服务器项目代码解析
运维·服务器·开发语言·前端·笔记·html