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";
	}
}
相关推荐
「QT(C++)开发工程师」8 分钟前
嵌入式Lua脚本编程核心概念
开发语言·lua
_extraordinary_9 分钟前
Java Spring事务,事务的传播机制
java·开发语言·spring
golang学习记1 小时前
Go slog 日志打印最佳实践指南
开发语言·后端·golang
新手村领路人2 小时前
python opencv gpu加速 cmake msvc cuda编译问题和设置
开发语言·python·opencv
hqyjzsb2 小时前
2025文职转行AI管理岗:衔接型认证成为关键路径
大数据·c语言·人工智能·信息可视化·媒体·caie
dengzhenyue2 小时前
C# 初级编程
开发语言·c#
jf加菲猫2 小时前
条款20:对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr
开发语言·c++
jf加菲猫3 小时前
条款21:优先选用std::make_unique、std::make_shared,而非直接new
开发语言·c++
消失的旧时光-19433 小时前
Kotlin 高阶函数在回调设计中的最佳实践
android·开发语言·kotlin
LucianaiB4 小时前
掌握 Rust:从内存安全到高性能服务的完整技术图谱
开发语言·安全·rust