A. Marketing Scheme
#include <bits/stdc++.h>
using namespace std;
int main () {
int t;
cin >> t;
while(t--) {
int l, r;
cin >> l >> r;
if(r <= 2 * l - 1) {
cout << "YES" << endl;
}else {
cout << "NO" << endl;
}
}
}
B. Reverse Binary Strings
#include <bits/stdc++.h>
using namespace std;
int main () {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
string s;
cin >> s;
int temp1 = 0;
int ans1 = 0;
int temp2 = 0;
int ans2 = 0;
for(int i = 0; i < n; ++i) {
if(s[i] == '1') {
temp1++;
ans2 += (temp2 == 0) ? 0 : temp2 - 1;
temp2 = 0;
} else {
temp2++;
ans1 += (temp1 == 0) ? 0 : temp1 - 1;
temp1 = 0;
}
}
ans1 += (temp1 == 0) ? 0 : temp1 - 1;
ans2 += (temp2 == 0) ? 0 : temp2 - 1;
cout << max(ans1, ans2) << endl;
}
}
C. Chef Monocarp
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 210;
int dp[MAXN][MAXN];
int main () {
int T;
cin >> T;
while(T--) {
int n;
cin >> n;
std::vector<int> v(n + 1, 1e9);
memset(dp, 0x3f3f3f3f, sizeof dp);
for(int i = 1; i <= n; ++i){
cin >> v[i];
}
sort(v.begin() + 1, v.end());
// dp[0][0] = 0;
// for(int i = 1; i <= 2 * n; ++i) {
// dp[i][0] = 0;
// for(int j = n; j >= 1; --j) {
// dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1] + abs(v[j] - i));
// }
// }
// cout << dp[2 * n][n] << endl;
//用一个数组实现:
int HP[MAXN];
memset(HP, 0x3f3f3f3f, sizeof HP);
HP[0] = 0;
for(int i = 1; i <= 2 *n; ++i) {
for(int j = n; j >= 1; --j) {
HP[j] = min(HP[j], HP[j - 1] + abs(v[j] - i));
}
}
cout << HP[n] << endl;
}
}
D. Minimal Height Tree
#include <bits/stdc++.h>
using namespace std;
int main () {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
std::vector<int> v(n + 1);
std::vector<int> hp(n + 1);
for(int i = 1; i <= n; ++i) {
cin >> v[i];
}
int l = 1;
hp[1] = 0;
for(int i = 2; i <= n; ++i) {
if(v[i] < v[i - 1]) {
l++;
}
hp[i] = hp[l] + 1;
}
cout << hp[n] << endl;
}
}