Cf #779 (Div. 2) - C
阿新 • • 發佈:2022-03-30
題目大意
這題目題意賊繞
給一個1~n的排列p,根據p做數列b,bi表示p1~pi中的最大值。b數列中不同的數值數量就是排列p的力量。
現在給出數列c,ci表示p向左迴圈右移i-1位所得到的力量值。問給出的c有沒有可能被一種p得到。
思路
觀察可知 1 有且只有一個,不符合的可直接判錯
通過幾組資料模擬可發現,每移動一位 ,下一個力量值最多增加 1 以此判斷是否正確
需要注意最後一位也要對第一為進行判斷
程式碼
#include <bits/stdc++.h> typedef long long ll; using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int T; cin >> T; while (T--) { int n; cin >> n; int s[n+1]; int flag = 0; for (int i = 0; i < n; i++) { cin >> s[i]; if (s[i] == 1) flag++; } s[n]=s[0]; int k = 1; for (int i = 0; i + 1 <= n; i++) if (s[i + 1] - s[i] > 1) { k = 0; break; } if (k == 1 && flag == 1) cout << "YES\n"; else cout << "NO\n"; } return 0; }