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; }