【題解】Codeforces 1291B. Array Sharpening

【題目敘述】https://codeforces.com/contest/1291/problem/B
【解題想法】

  • 題目要求嚴格遞增再遞減
  • 先判斷前半段的數字,每個數字要大於等於index-i,才有辦法改變數字成一串嚴格遞增的序列。
  • (Line-17/18) 判斷長度為1或偶數(兩個中點)的情況。
  • 在判斷中點後方的數字,每個數字要大於等於index-i,才有餘裕改變數字成一串嚴格遞減的序列。
#include <iostream>
using namespace std;
 
int t, n, a, m;
bool flag;
 
int main() {
    cin >> t;
    while (t--){
        cin >> n;
        flag = true;
        for (int i = 0; i < (n+1)/2; i++){
            cin >> a;
            if (a < i) flag = false;
        }
        m = a;
        if (n != 1) cin >> a;
        if (m < (n/2) && a < (n/2)) flag = false;
        for (int i = n/2-1; i > 0; i--){
            if (a < i) flag = false;
            cin >> a;
        }
        if (flag) cout << "Yes\n";
        else cout << "No\n";
    }
}
分享本文 Share with friends