CodeForces 595C Warrior and Archer(贪心博弈)

来源:互联网 发布:域名贴吧 编辑:程序博客网 时间:2024/05/29 08:00

题意:

给一个数组,A和B轮流去除一个元素直到剩下最后两个元素,A希望这两个元素的差值尽可能小,B希望这两个元素的差值尽可能大。求最终的差值。

思路:

假设最终剩下的坐标是l和r,那么A选的肯定是[l,r]外的点(为了让最终的l,r靠的更近),B选的肯定是[l,r]内的点(为了让最终的l,r离得更远),所以l和r的间隔为(n-2)/2;

代码:

#include <bits/stdc++.h>using namespace std;const int maxn = 200000+7;int arr[maxn];int main(){    int n;    scanf("%d",&n);    for(int i = 0;i<n;i++)    {        scanf("%d",&arr[i]);    }    sort(arr,arr+n);    int minn= 0x3f3f3f3f;    int len = (n-2)/2;    for(int i = 0;i<n;i++)    {        if(i+len+1>=n)            break;        minn = min(minn,arr[i+len+1]-arr[i]);    }    printf("%d",minn);    return 0;}


阅读全文
1 0
原创粉丝点击