C - Mind Control CodeForces - 1291C

3036 ワード

料理が家に着いたので,題意が読めない.
テーマ:
全部でn人とn個の数字があります
n人が1チームになって、n個の数字にも順番があります
あなたはm番目の位置にいます.
このシーケンスの最初の数字または最後の数字を順番に持つことができます.
すべての人が操作を開始する前に最大k人を説得することができます
このシーケンスの最初の数字か最後の数字を固定させます
すべての可能性のある状況で手に入れることができる数字の最大値の中の最小値を聞いてください(つまり、あなたが取得する時、最初と最後の2つの数字はいつも最大のものを取って、これらの数字の中の最小値を聞いています)
問題:
どのように取っても、最終的には必ずn-m+1個の連続したグループ数が残っており、全部でk人が前に置くか後ろに置くかを選択できるので、m-1-k人がいるのは不確定です.
データを見て、2層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;
}