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";
	}
}
相关推荐
点心的游戏开发世界4 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
phltxy5 小时前
C语言操作符详解
java·c语言·算法
RuoZoe5 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
事圆则缓6 小时前
Kotlin 协程完全指南
开发语言·kotlin
我爱写代码i7 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路7 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
统计学小王子8 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
知无不研8 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴8 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
dsyyyyy11018 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript