A题
模拟过程考查对临界条件的判断

#include<bits/stdc++.h>
using namespace std;
int main() {
int T; cin >> T;
while (T--) {
int A, B, C, D; cin >> A >> B >> C >> D;
int X, Y, X1, Y1, X2, Y2; cin >> X >> Y >> X1 >> Y1 >> X2 >> Y2;
cout << (X1 <= X-A+B && X-A+B <= X2 && Y1 <= Y-C+D && Y-C+D <= Y2 && (X2>X1 || (A+B==0)) && (Y2>Y1 || (C+D==0)) ? "Yes" : "No") << '
';
}
return 0;
}
B题
相同公因数进行判定。用个标号记录对应颜色即可。由于数据规模较小。直接暴力即可。

#include <bits/stdc++.h>
using namespace std;
int p[11] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};
int vis[12];
int main () {
int t;
scanf("%d", &t);
while(t--) {
int n;
scanf("%d", &n);
int a[1005];
int color[1005];
for(int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
memset(vis, 0, sizeof vis);
int tep = 0;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < 11; ++j) {
if(a[i] % p[j] == 0) {
if(!vis[j]) {
vis[j] = ++tep;
}
color[i] = vis[j];
break;
}
}
}
printf("%d
", tep);
for(int i = 0; i < n; ++i) {
printf("%d ", color[i]);
}
printf("
");
}
}
C题
每k步进行遍历。记录长度为k的区间中两端的每个字母中出现次数。从开始遍历到中间,每次n减去字母出现最多次数(代表不用修改的)因为最多修改n次。

#include<bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T; cin >> T;
while (T--) {
int N, K; cin >> N >> K;
string S; cin >> S;
int ans = N;
for (int i = 0; i <= K-1-i; i++) {
vector<int> cnt(26, 0);
for (int j = i; j < N; j += K) {
cnt[S[j] - 'a']++;
}
if (i < K-1-i) {
for (int j = K-1-i; j < N; j += K) {
cnt[S[j] - 'a']++;
}
}
ans -= *max_element(cnt.begin(), cnt.end());
}
cout << ans << '
';
}
return 0;
}
D题
水题。不想多说了。。。

#include<bits/stdc++.h>
using namespace std;
//SB题
const int T = 1 << 17;
const int F = 2 * T - 1;
int dp[10][10];
int n, m;
int main () {
scanf ("%d", &n);
printf ("3 3
%d %d %d
%d %d %d
%d %d %d
", F, T, 0, n, T, 0, n, F, n);
// int a[10][10] = { {F, T, 0}, {n, T, 0}, {n, F, n}};
// memset(dp, 0, sizeof dp);
// dp[0][1] = a[0][0];
// for(int i = 1; i <= 3; ++i) {
// for(int j = 1; j <= 3; ++j) {
// dp[i][j] = max(dp[i-1][j] & a[i - 1][j - 1], dp[i][j-1] & a[i - 1][j - 1]);
// }
// }
// for(int i = 1; i <= 3; ++i) {
// for(int j = 1; j <= 3; ++j) {
// cout << dp[i][j] << " ";
// }
// cout << endl;
// }
return 0;
}