Week2 训练赛总结

赛时情况

总结:矩阵的题见得太少了,递推式子不会推,总之: $\Large 菜$

赛后总结

T1

大水题,过

T2

赛时,想到了循环节,然后直接枚举区间内与循环的不同。正解是先预处理循环节储存前缀和,然后取6种情况中最小值。

#include<bits/stdc++.h>
using namespace std;
#define M 200010
#define int long long
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define fr(i,j,k) for(int i=j;i<=k;++i)
#define rs(i,j,k) for(int i=j;i>=k;--i)
#define endl '\n'
#define IOS ios::sync_with_stdio(0)
#define pb(i) push_back(i)
#define pf(i) push_front(i)
#define mem(a,b) memset(a,b,sizeof a)
int n, m;
char s[M];
string a[6];
int sum[6][M];
signed main() {
    scanf("%lld%lld",&n,&m);
    scanf("%s",s);
    a[0] = "abc";
    a[1] = "acb";
    a[2] = "bac";
    a[3] = "bca";
    a[4] = "cab";
    a[5] = "cba";
    fr(i,1,n)
        fr(j,0,5)
            sum[j][i] = (s[i - 1] != a[j][(i + 1) % 3]) + sum[j][i - 1];
    while (m--) {
        int l, r, ans = n;
        scanf("%lld%lld",&l,&r);
        fr(i,0,5){
            int S = sum[i][r] - sum[i][l - 1];
            ans = min(ans, S);
        }
        printf("%lld\n",ans);
    }
    return 0;
}
//时间轴

T3

小水题,还行。

$dp_i = dp _ {i-1} + dp_{i-m+1}$

T4

posted @ 2023-07-15 11:07  固态H2O  阅读(3)  评论(0编辑  收藏  举报  来源