• Codeforces Round #616 (Div. 2) C. Mind Control


    题目链接:http://codeforces.com/contest/1291/problem/C

    思路:

    我们可以很容易想到,只有前m-1个人才能影响m的选择的大小,后面的人无法影响。

    如果所有人都无法控制,那么选数情况的不可控性很大,于是如果我们可以控制k个人,让他们的选择被我们控制,

    那么,可控性随之上升,我们知道,只有前m-1个人能影响m的选择,于是,我们应该尽可能多的控制前m-1个人,

    于是,我们可以控制的人数应该是x=min(k,m-1),如果x = m-1,说明m前面的所有人都可以控制,那就是可控的情况了,

    我们就可以枚举x个人的选择情况,比如有3个人选了前3个数,那么x-3个人选了后x-3个数,ansi = max(a[4],a[n-(x-3)])。

    最后的答案应该是end_ans = max(end_ans,ans1,ans2...ansm-1)一个for循环就可以搞定。

    如果x < m-1,及有y = m-1-k个人的选择不确定,说明有了随机性,那么我就在上面可以确定的情况中枚举所有的随机选择,

    对于随机情况我们需要选择最小值。因为ans要求的是任何情况的ans至少是多少。

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main(){
     6 
     7     int a[4000];
     8     int n,m,k,p,T;
     9     cin >> T;
    10     while(T--){
    11         cin >> n >> m >> k;
    12         for(int i = 1; i <= n; ++i) cin >> a[i];
    13         k = min(k,m-1);//可控制的人数
    14         p = max(m-1-k,0);//不可控制的人数
    15         int ans = -1;
    16         for(int i = 0; i <= k; ++i){//i个人选前面的数,可控制的人
    17             int tmp_ans = (int)1e9+10;
    18             for(int j = 0; j <= p; ++j){//j个人选前面的数,不可控制的人
    19                 tmp_ans = min(tmp_ans,max(a[i+j+1],a[n-(k-i)-(p-j)]));
    20             }
    21             ans = max(ans,tmp_ans);
    22         }
    23         cout << ans << endl;
    24     }
    25 
    26     return 0;
    27 }
  • 相关阅读:
    BZOJ3036: 绿豆蛙的归宿
    BZOJ1419: Red is good
    BZOJ1013: [JSOI2008]球形空间产生器sphere
    BZOJ1415: [Noi2005]聪聪和可可
    BZOJ1417: Pku3156 Interconnect
    BZOJ1076: [SCOI2008]奖励关
    BZOJ2318: Spoj4060 game with probability Problem
    BZOJ1426: 收集邮票
    BZOJ2720: [Violet 5]列队春游
    BZOJ2698染色
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/12259670.html
Copyright © 2020-2023  润新知