Prof. Slim
一组数能不能通过不同的数(ai和aj)交换符号(+或-),使得数组成为升序数列。
把所有的负号移到数组前面,然后判断是不是升序即可。
#include <bits/stdc++.h>
void solve() {
int n;
std::cin >> n;
std::vector<int>a(n);
int fu = 0;
for (int i = 0; i < n; i++) {
std::cin >> a[i];
fu += (a[i] < 0);
a[i] = abs(a[i]);
}
for (int i = 0; i < fu; i++) {
a[i] *= -1;
}
std::cout << (std::is_sorted(a.begin(), a.end()) ? "YES\n" : "NO\n");
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}
Dorms War
把特殊字符处理成1非特殊处理成0,那么最长的删除区间就是所有分区最长的时间
#include <bits/stdc++.h>
void solve() {
int n, m;
std::cin >> n;
std::string s;
std::cin >> s;
std::cin >> m;
bool ts[26] = {};
for (int i = 0; i < m; i++) {
char c;
std::cin >> c;
ts[c - 'a'] = true;
}
int cnt = 0, ans = 0;
for (int i = 1; i < n; i++) {
if (!ts[s[i] - 'a']) {
cnt++;
} else {
cnt++;
ans = std::max(ans, cnt);
cnt = 0;
}
}
std::cout << ans << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}