Codeforces Round#699(Div。2)B。ニューコロニー

B.新しいコロニー

TEST2秒あたりの制限時間
test256メガバイトあたりのメモリ制限
入力inputstandard
outputstandard出力
目的地に到達した後、新しい惑星に新しい植民地を構築したいです。この惑星にはたくさんの山があり、コロニーは平らな面に建てる必要があるので、岩を使って山を平らにすることにしました(あなたはまだ夢を見ているので、これはあなたにとって理にかなっています)。

配列h1、h2、…、hnが与えられます。ここで、hiはi番目の山の高さ、kは岩の数です。

最初の山の頂上から1つずつ岩を投げ始め、次のように転がります(現在の山の高さが高いと仮定します)。

hi≥hi+ 1の場合、岩は次の山に転がります。
hi <hi + 1の場合、岩は転がりを停止し、山の高さを1増やします(hi = hi + 1)。
岩が最後の山に達すると、それは廃棄物収集システムに落ちて消えます。
k番目のボールダーの位置を見つけるか、それが廃棄物収集システムに分類されることを確認します。

翻訳:
目的地に到着した、あなたはこの新しい惑星に新しいコロニーを設立したいと思っています。この惑星にはたくさんの山があり、コロニーは平らな面に建てる必要があるので、岩で山を平らにすることにします(あなたはまだ夢を見ているので、これはあなたにとって理にかなっています)。
配列h1、h2、…、hnを取得します。ここで、Hiはi番目の山の高さ、Kは所有する岩の数です。

最初の山の頂上から1つずつ岩を投げ始め、次のように転がります(現在の山の高さがHiであると仮定します)。

Hi≥Hi+ 1の場合、ボルダーは次の山に転がります。Hi
<Hi + 1の場合、ボルダーは転がりを停止し、山の高さを1増やします(Hi = Hi + 1)。
ボルダーが最後の山、それは廃棄物収集システムに落ちて消えます。
K番目の岩を見つけるか、それが廃棄物収集システムに分類されることを確認します。

入力

最初の行には、単一の整数t(1≤t≤100)—テストケースの数が含まれています。

各テストケースは2行で構成されています。;各テストケースの最初の行は、二つの整数nとk(1≤k≤101≤n≤100含ま9山の数と岩の数を- )。

2行目には、n個の整数h1、h2、…、hn(1≤hi≤100)—山の高さが含まれています。

すべてのテストケースのnの合計が100を超えないことが保証されています。

翻訳:
最初の行には、テストケースの数である単一の整数t(1≤t≤100)が含まれています。

各テストケースは2行で構成されています。;各テストケースの最初の行は、二つの整数nおよびK(1≤k≤101≤n≤100含ま9、山の数と岩の数)。

2行目には、山の高さH1、H2、…、Hn(1≤Hi≤100)のn個の整数が含まれています。

すべてのテストケースでnが100を超えないようにしてください。

出力

k番目の岩が収集システムに分類される場合は、テストケースごとに-1を出力します。それ以外の場合は、k番目のボルダーの位置を印刷します。

翻訳:
各テストケースについて、K-Boulderが収集システムに該当する場合は、-1を出力します。それ以外の場合は、Kボルダーが落ちる場所を印刷します。

inputCopy

4
4 3
4 1 2 3
2 7
1 8
4 5
4 1 2 3
3 1
5 3 1

outputCopy
2
1
-1
-1
注意
しましょうシミュレート最初のケース:

最初の岩はi = 1から始まります。h1≥h2なので、i = 2にロールし、h2 <h3で停止します。
新しい高さは[4,2,2,3]です。
2番目の岩はi = 1から始まります。h1≥h2なので、岩はi = 2に転がります。h2≥h3であるため、ボルダーはi = 3に転がり、h3 <h4であるためそこで停止します。
新しい高さは[4,2,3,3]です。
3番目の岩はi = 1から始まります。h1≥h2なので、i = 2にロールし、h2 <h3で停止します。
新しい高さは[4,3,3,3]です。
各岩が止まった位置は次のとおりです:[2,3,2]。

2番目のケースでは、7つの岩すべてが最初の山で停止し、高さが1から8に上昇します。

3番目のケースは最初のケースと似ていますが、5つの岩を投げます。最初の3つは、最初のテストケースと同じように回転します。その後、山の高さは[4,3,3,3]に等しくなります。そのため、他の2つの岩は収集システムに分類されます。

4番目のケースでは、最初で唯一の岩が収集システムに直接分類されます。
翻訳:
最初のケースをシミュレートしましょう

最初のボルダーはi = 1から始まります。H1≥H2であるためi = 2に転がり、そこで停止します。H2<H3であるため、新しい高さは[4,2,2,3]です。2
番目のボルダーはi = 1から始まります。;H1≥H2の場合、ボルダーはi = 2にロールします。H2≥H3の場合、ボルダーはi = 3にロールし、そこで停止します。H3<H4の場合、新しい高さは[4、2、3、3]です
。3番目のピースボルダーはi = 1から移動します。H1≥H2であるためi = 2に転がり、そこで停止します。H2<H3であるため、新しい高さは[4,3,3,3]です。
各ボルダー停止位置は次のとおりです。 :[2、3、2]。

2番目のケースでは、7つの岩すべてが最初の山で上昇を停止し、その高さは1から8まで変化します。

3番目の状況は最初の状況と似ていますが、今度は5つの岩を投げます。最初の3つは、最初のテストケースと同じ方法でスクロールします。その後、山の高さは[4、3、3、3]に等しくなります。そのため、他の2つの岩は収集システムに分類されます。

4番目のケースでは、最初で唯一の岩が直接収集システムに分類されます。

問題解決のアイデア:

1.タイトルの要件に従って、tを入力し、変数n、k、h [n]、各ループの位置を入力して、右に反転するたびに場所の位置を記録します。
2.ボルダーの回転位置が記録され、循環的に計算されます。2つのサイクルが使用されます。1つはボルダーのローリングで、もう1つはボルダーの特定の位置とローリングの計算です
。h[j]> = h [j + 1]、j ++ループを続行し、continueを使用します。
それ以外の場合は、現在の位置の高さが1 h [j] + = 1増加し、ボルダーの保管位置position = j +1が同時に記録されます。終了ループして次のボルダー
3を開始します。注:ボルダーがある場合は、直接転がすことができます。廃棄物収集システムを使用する場合、論理的には、ボルダーが転がることができる場合、操作は周期的にボルダーを転がしません。収集システムの場合、次の岩に到達することができます。

参照コード:

#include<iostream>
using namespace std;

int main(void)
{
    
    
    int t,n,k;
    cin>>t;

    while(t--){
    
    
        cin>>n>>k;
        int h[n];
        for(int i=0;i<n;i++)
            cin>>h[i];

        int position=0;
        for(int i=0;i<k;i++){
    
    
            int j=0;
            while(j<n-1){
    
    
                if(h[j]>=h[j+1]){
    
    
                    j++;
                    continue;
                }
                else {
    
    
                    h[j]+=1;
                    position=j+1;
                    break;
                }
            }
            if(j==n-1){
    
    
				position = j+1;
				break; 
			} 
            	
        }
        if(position == n)
            cout<<"-1"<<endl;
        else
            cout<<position<<endl;
    }

    return 0;
}

学ばない場合は、中断して
ください。学んだ場合は、親指を立てて互いに励ましてください。

おすすめ

転載: blog.csdn.net/weixin_45950429/article/details/113761093