Submission #67854576


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

/////////////////// メイン ///////////////////

int main () {
  
  /////////////////// 前入力 ///////////////////
  
  int q;
  cin >> q;

  /////////////////// 前処理 ///////////////////



  /////////////////// ループ ///////////////////

  // 問題数だけループ
  for (int loop=0; loop<q; loop++) {
    
    //////////////////// 入力 ////////////////////

    int n;
    cin >> n;

    vector<long long> a(n);
    for (int i=0; i<n; i++) {
      cin >> a.at(i);
    }

    //////////////// 出力変数定義 ////////////////

    long long result = 0;

    //////////////////// 処理 ////////////////////

    // 長さが1になるまでループ
    while (a.size()>1) {

      // 前から順に、確認済みのやつを入れておくvector
      vector<long long> b;

      // 全部を後ろからチェックする
      while (!a.empty()) {

        long long num = a.back();
        a.pop_back();

        // これが最後の1つだった場合
        if (a.empty()) {

          // bの末尾がそれ以上ならそこに合体させる、小さければスルー、空でもスルー
          if (!b.empty()&&num<=b.back()) {
            result += b.back()-num;
            b.back()++;
          } else {
            b.emplace_back(num);
          }

        // これが最初の1つだった場合 
        } else if (b.empty()) {

          // aの末尾がそれ以上ならそこに合体させる、小さければスルー、空でもスルー
          if (!a.empty()&&num<=a.back()) {
            result += a.back()-num;
            a.back()++;
          } else {
            b.emplace_back(num);
          }

        // num<=a<bの場合
        } else if (num<=a.back()&&a.back()<b.back()) {

          // aに合流させる
          result += a.back()-num;
          a.back()++;

        // num<=b<aの場合
        } else if (num<=b.back()&&b.back()<a.back()) {

          // bに合流させる
          result += b.back()-num;
          b.back()++;

        // num<b==aの場合
        } else if (num<b.back()&&b.back()==a.back()) {

          // とりあえず同じ値に増やしておく
          result += a.back()-num;
          b.emplace_back(a.back());

        // いずれでもない場合
        } else {

          // スルー
          b.push_back(num);

        }

      }

      // 確認済のを全部戻す
      swap(a,b);
    }

    //////////////////// 出力 ////////////////////

    cout << result << endl;
    
  }

  /////////////////// 後処理 ///////////////////



  //////////////////// 終了 ////////////////////

  return 0;

}

Submission Info

Submission Time
Task A - Merge and Increment
User wightou
Language C++ 23 (gcc 12.2)
Score 700
Code Size 2797 Byte
Status AC
Exec Time 166 ms
Memory 8512 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 1
AC × 64
Set Name Test Cases
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 01_small_10.txt, 01_small_11.txt, 01_small_12.txt, 01_small_13.txt, 01_small_14.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 03_sorted_00.txt, 03_sorted_01.txt, 03_sorted_02.txt, 03_sorted_03.txt, 03_sorted_04.txt, 03_sorted_05.txt, 04_almost_sorted_00.txt, 04_almost_sorted_01.txt, 04_almost_sorted_02.txt, 04_almost_sorted_03.txt, 04_almost_sorted_04.txt, 04_almost_sorted_05.txt, 05_same_00.txt, 05_same_01.txt, 05_same_02.txt, 06_corner_00.txt, 06_corner_01.txt, 06_corner_02.txt, 07_hack_1_00.txt, 07_hack_1_01.txt, 07_hack_1_02.txt, 07_hack_1_03.txt, 07_hack_1_04.txt, 08_hack_2_00.txt, 08_hack_2_01.txt, 08_hack_2_02.txt, 08_hack_2_03.txt, 08_hack_2_04.txt, 09_hack_3_00.txt, 09_hack_3_01.txt, 09_hack_3_02.txt, 09_hack_3_03.txt, 09_hack_3_04.txt, 09_hack_3_05.txt, 09_hack_3_06.txt, 09_hack_3_07.txt, 09_hack_3_08.txt, 09_hack_3_09.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3468 KiB
01_small_00.txt AC 68 ms 3544 KiB
01_small_01.txt AC 68 ms 3432 KiB
01_small_02.txt AC 50 ms 3484 KiB
01_small_03.txt AC 166 ms 3424 KiB
01_small_04.txt AC 127 ms 3464 KiB
01_small_05.txt AC 110 ms 3520 KiB
01_small_06.txt AC 99 ms 3468 KiB
01_small_07.txt AC 77 ms 3528 KiB
01_small_08.txt AC 66 ms 3528 KiB
01_small_09.txt AC 132 ms 3528 KiB
01_small_10.txt AC 95 ms 3532 KiB
01_small_11.txt AC 77 ms 3500 KiB
01_small_12.txt AC 66 ms 3528 KiB
01_small_13.txt AC 46 ms 3404 KiB
01_small_14.txt AC 36 ms 3500 KiB
02_random_00.txt AC 48 ms 5460 KiB
02_random_01.txt AC 53 ms 5756 KiB
02_random_02.txt AC 45 ms 5536 KiB
02_random_03.txt AC 53 ms 5760 KiB
02_random_04.txt AC 52 ms 5692 KiB
02_random_05.txt AC 53 ms 5752 KiB
02_random_06.txt AC 33 ms 5112 KiB
02_random_07.txt AC 53 ms 5780 KiB
02_random_08.txt AC 33 ms 5072 KiB
02_random_09.txt AC 54 ms 5680 KiB
03_sorted_00.txt AC 52 ms 6772 KiB
03_sorted_01.txt AC 52 ms 7900 KiB
03_sorted_02.txt AC 53 ms 7904 KiB
03_sorted_03.txt AC 51 ms 6728 KiB
03_sorted_04.txt AC 53 ms 8404 KiB
03_sorted_05.txt AC 53 ms 8308 KiB
04_almost_sorted_00.txt AC 51 ms 6760 KiB
04_almost_sorted_01.txt AC 53 ms 8040 KiB
04_almost_sorted_02.txt AC 52 ms 8016 KiB
04_almost_sorted_03.txt AC 51 ms 6944 KiB
04_almost_sorted_04.txt AC 53 ms 8512 KiB
04_almost_sorted_05.txt AC 53 ms 8292 KiB
05_same_00.txt AC 19 ms 5780 KiB
05_same_01.txt AC 55 ms 5616 KiB
05_same_02.txt AC 51 ms 5780 KiB
06_corner_00.txt AC 39 ms 5700 KiB
06_corner_01.txt AC 52 ms 8392 KiB
06_corner_02.txt AC 51 ms 6792 KiB
07_hack_1_00.txt AC 53 ms 6764 KiB
07_hack_1_01.txt AC 52 ms 5840 KiB
07_hack_1_02.txt AC 58 ms 7700 KiB
07_hack_1_03.txt AC 54 ms 6800 KiB
07_hack_1_04.txt AC 52 ms 5720 KiB
08_hack_2_00.txt AC 55 ms 6784 KiB
08_hack_2_01.txt AC 54 ms 6752 KiB
08_hack_2_02.txt AC 54 ms 6796 KiB
08_hack_2_03.txt AC 54 ms 6820 KiB
08_hack_2_04.txt AC 55 ms 6752 KiB
09_hack_3_00.txt AC 19 ms 5840 KiB
09_hack_3_01.txt AC 20 ms 5680 KiB
09_hack_3_02.txt AC 23 ms 5676 KiB
09_hack_3_03.txt AC 23 ms 5720 KiB
09_hack_3_04.txt AC 26 ms 5844 KiB
09_hack_3_05.txt AC 26 ms 5684 KiB
09_hack_3_06.txt AC 29 ms 5684 KiB
09_hack_3_07.txt AC 29 ms 5704 KiB
09_hack_3_08.txt AC 32 ms 5768 KiB
09_hack_3_09.txt AC 33 ms 5760 KiB