今天打了一下SEERC2019,虽然做的很菜,但是题的质量真的不错
I 签到题(思维)
题意:
Alice和Bob玩取数游戏,Alice每次从A序列中取出一个数字,Bob每次从B序列中取出一个数字,两人轮流取数字,直到最后只剩下一个数字,Alice先手。Alice希望最后剩下的两个数字差值的绝对值尽可能的小,Bob则相反,问如果两人都取最佳策略,最后这个绝对值最大是多少?
分析与解答:
因为两个人的选取最佳策略,那么无论Alice最后剩下数字为多少,Bob一定会取到和它差值最小的那个,因此答案就是 m a x { m i n { a i − b j } } max\{min\{a_i-b_j\}\} max{ min{ ai−bj}}
代码:
#include <cstdio>
#include <algorithm>
#define MAXN 1003
#include <cstring>
#include <cmath>
using namespace std;
long long a[MAXN],b[MAXN];
long long ans = 0;
int main()
{
int n;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
scanf("%I64d",&a[i]);
for(int i = 1;i <= n;i++)
scanf("%I64d",&b[i]);
sort(a + 1,a + 1 + n);
for(int i = 1;i <= n;i++)
{
long long res = 2e9;
for(int j = 1;j <= n;j++)
res = min(abs(b[j] - a[i]),res);
ans = max(ans,res);
}
printf("%I64d\n",ans);
return 0;
}
D 构造+思维
题意:
给定一个长为 2 n 2n