zoukankan      html  css  js  c++  java
  • Codeforces 594A

    题目大意:给你在一条线上的n(偶数)个点,mike和alice 开始禁点,他们轮流开始,直到最后只剩下两个点,

    mike希望剩下的两个点距离尽可能小,alice希望剩下的两个点距离尽可能大,他们都采用最优策略,问你最后

    剩下的两个点是什么。

    这种脑洞题好难啊啊,难受。

    思路:我们假定剩下了两个点是 x1 和 x2 ,那么最优考虑,mike拿掉的是<x1 和 >x2的点,alice拿掉的是

    x1 和 x2 之间的点,所以我们枚举x1 和 x2,因为mike先选,我们取其中的最小值。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=2*1e5+5;
    ll a[N];
    int n;
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
        sort(a+1,a+1+n);
        ll ans=1e18;
        for(int i=1;i<=n;i++)
        {
            if(i+n/2<=n) ans=min(ans,a[i+n/2]-a[i]);
        }
        cout<<ans<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    双端队列
    顺序循环队列
    顺序队列
    Counting Triangles(hd1396)
    蒟蒻之栈模拟递归
    链栈以及顺序栈应用—算数表达式
    栈的简单应用-进制转换
    链栈
    共享栈
    顺序栈
  • 原文地址:https://www.cnblogs.com/CJLHY/p/7388804.html
Copyright © 2011-2022 走看看