C - Mind Control CodeForces - 1291C

菜到家了,题意都读不懂。

题目大意:

总共有n个人和n个数字

n个人拍成一队,n个数字也是有顺序的

你排在第m个位置

按照顺序的每个人可以拿走这个序列中的第一个数字或者最后一个数字

你可以在所有人操作开始前说服最多k个人

让他们固定拿这个序列的第一个或者是最后一个数字

问你在所有可能的情况中可以拿到的数字的最大值中的最小值(即,到你取得的时候,首尾两个数字你总是会取最大的那个,问这些数字中的最小值)

题解:

无论怎么拿,最终一定是剩下n-m+1个连续的一组数,一共有k个人可以选择放在前边还是放在后边,那么有m-1-k个人是不确定的。

看一下数据,可以用两层for。所以暴力有i个人放在前端,然后有j个人不确定,j从i+1开始。

code:

#include
using namespace std;
const int INF=1e9+7;
const int N=1E5+7;
int arr[N];
void solve()
{

    int n,m,k;
    cin>>n>>m>>k;
    k=min(k,m-1);
    for(int i=1;i<=n;i++) cin>>arr[i];
    int sum=0;
    for(int i=0;i<=k;i++){//有i个人选择前端
        int ans=INF;
        for(int j=i+1;j<=m-k+i;j++)//j个人不受控制。
        {
            ans=min(ans,max(arr[j],arr[j+n-m]));
        }
        sum=max(sum,ans);
    }
    cout<endl;
}
int main(){
    int t;
    cin>>t;
    while(t--) solve();
    return 0;
}

 

你可能感兴趣的:(C - Mind Control CodeForces - 1291C)