C. Game of Mathletes

time limit per test

2 seconds

memory limit per test

256 megabytes

Alice and Bob are playing a game. There are n (n is even) integers written on a blackboard, represented by x1,x2,...,xn. There is also a given integer k and an integer score that is initially 0. The game lasts for n2 turns, in which the following events happen sequentially:

  • Alice selects an integer from the blackboard and erases it. Let's call Alice's chosen integer a.
  • Bob selects an integer from the blackboard and erases it. Let's call Bob's chosen integer b.
  • If a+b=k, add 1 to score.

Alice is playing to minimize the score while Bob is playing to maximize the score. Assuming both players use optimal strategies, what is the score after the game ends?

Input

The first line contains an integer t (1≤t≤104) --- the number of test cases.

The first line of each test case contains two integers n and k (2≤n≤2⋅105,1≤k≤2⋅n, n is even).

The second line of each test case contains n integers x1,x2,...,xn (1≤xi≤n) --- the integers on the blackboard.

It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.

Output

For each test case, output the score if both players play optimally.

Example

Input

Copy

复制代码

4

4 4

1 2 3 2

8 15

1 2 3 4 5 6 7 8

6 1

1 1 1 1 1 1

16 9

3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3

Output

Copy

复制代码
2
1
0
4

Note

In the first test case, one way the game may go is as follows:

  • Alice selects 1 and Bob selects 3. The score increases as 1+3=4. Now the two integers remaining on the blackboard are 2 and 2.
  • Alice and Bob both select 2. The score increases as 2+2=4.
  • The game ends as the blackboard now has no integers.

In the third test case, it is impossible for the sum of Alice and Bob's selected integers to be 1, so we answer 0.

Note that this is just an example of how the game may proceed for demonstration purposes. This may not be Alice or Bob's most optimal strategies.

解题说明:此题是一道模拟题,其实就是找出数列中存在多少对数字,其和为K。可以用map来存储数字,求出对数即可。

cpp 复制代码
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n, m, i, j, ans = 0, temp = 0;
		map<int, int>mp;
		cin >> n >> m;
		int a[200005];
		for (i = 0; i < n; i++)
		{
			cin >> a[i];
			if (mp[m - a[i]] != 0)
			{
				ans++;
				mp[m - a[i]]--;
			}
			else
			{
				mp[a[i]]++;
			}
		}
		cout << ans << "\n";
	}
}
相关推荐
橘子编程7 分钟前
GoF 23 种设计模式完整知识总结与使用教程
java·c语言·开发语言·python·设计模式
玖釉-9 分钟前
告别 Shared Memory 瓶颈:Vulkan Subgroup 架构解析与硬核实战指南
开发语言·c++·windows·图形渲染
lly20240611 分钟前
SQL UPDATE 语句详解
开发语言
君以思为故12 分钟前
认识Linux -- 线程同步与互斥
java·开发语言
吴梓穆14 分钟前
UE5 C++ 两种枚举
开发语言·c++·ue5
飞Link15 分钟前
pprint 全量技术手册:复杂数据结构的结构化输出引擎
开发语言·前端·python
意疏16 分钟前
【C语言】解决VScode中文乱码问题
c语言·开发语言·vscode
星辰徐哥16 分钟前
异步定时任务系统的设计与Rust实战集成
开发语言·后端·rust
被摘下的星星17 分钟前
Java接口需要注意的细节
java·开发语言
独特的螺狮粉21 分钟前
开源鸿蒙跨平台Flutter开发:手机清理小助手应用
开发语言·flutter·游戏·智能手机·开源·harmonyos·鸿蒙