Files
exercises/cs101/2025mid/exam_2025mid_06_perm.cpp

55 lines
1.4 KiB
C++

#include <iostream>
#include <vector>
bool validate_arithmetic(const std::vector<bool>& bucket) {
if (bucket.size() <= 1) { return false; }
int previous_idx = -1, distance = -1;
for (int i = 0; i < bucket.size(); i++) {
if (!bucket[i]) { continue; }
if (previous_idx == -1) {
previous_idx = i;
continue;
}
if (distance == -1) {
distance = i - previous_idx;
}
if (i - previous_idx != distance) {
return false;
}
previous_idx = i;
}
return true;
}
int clac_ans(const std::vector<int>& nums) {
if (nums.size() == 1) { return 0; }
std::vector<bool> bucket_begin(nums.size(), false);
std::vector<bool> bucket_end(nums.size(), true);
int ans = 0;
for (int i = 0; i < nums.size(); i++) {
bucket_begin[nums[i]] = true;
bucket_end[nums[i]] = false;
if (validate_arithmetic(bucket_begin) && validate_arithmetic(bucket_end)) {
ans++;
std::clog << i << std::endl;
}
}
return ans - 1;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
std::cin >> n;
while (std::cin >> n) {
std::vector<int> nums(n);
for (int i = 0; i < n; i++) { std::cin >> nums[i], nums[i]--; }
std::cout << clac_ans(nums) << std::endl;
}
return 0;
}