首先Alice擦一个数a,然后Bob再擦一个数b,只有当a+b=k的时候才可以得分,Alice想要最小化分数而Bob想要最大化分数,所以如果给定的数中存在两个数的和为k,那么当Alice擦掉其中一个的时候Bob一定会擦掉另一个来得分,而且题目给定的数组长度为偶数,所以我们只需要运用双指针的思想找到数组中存在几对符合题意的数就可以了。
#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int a[N];
int sum(int n , int k){
int ans = 0;
int l = 1 , r = n;
while(l < r){
int s = a[l] + a[r];
if(s == k){
l ++;
r --;
ans ++;
}else if(s < k)
l ++;
else
r --;
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) , cout.tie(0);
int t;
cin >> t;
while(t --){
int n , k;
cin >> n >> k;
for(int i = 1 ; i <= n ; i ++)
cin >> a[i];
sort(a + 1 , a + n + 1);
int ans = sum(n , k);
cout << ans << '\n';
}
return 0;
}
标签:int,题解,Mathletes,Alice,cin,++,Game,ans,Bob
From: https://blog.csdn.net/2401_87690384/article/details/145308391