Educational Codeforces Round 48 (Rated for Div. 2)

戏子无情 提交于 2019-12-05 04:02:59

又是回忆场。

A - Death Note

题意:有一本笔记,你在第i天连续写ai个字,每写满m个字强制翻页(不管还要不要写),求第i天翻了多少页。

题解:那么当前的页数就是下整+1(其实不加也可以,从0开始),直接模拟即可,我当时写的什么东西?

注意溢出。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void test_case() {
    int n, m;
    scanf("%d%d", &n, &m);
    ll cur = 0, px = 1;
    for(int i = 1; i <= n; ++i) {
        int ai;
        scanf("%d", &ai);
        cur += ai;
        ll cx = (cur / m) + 1;
        printf("%lld%c", cx - px, " \n"[i == n]);
        px = cx;
    }
}

int main() {
#ifdef KisekiPurin
    freopen("KisekiPurin.in", "r", stdin);
#endif // KisekiPurin
    int t = 1;
    for(int ti = 1; ti <= t; ++ti) {
        //printf("Case #%d: ", ti);
        test_case();
    }
}

B - Segment Occurrences

题意:给定两个字符串s,t,询问q次,每次询问s的子串[l,r]中出现了t多少次。

题解:很明显用KMP可以做,不能再鸽KMP了,弄个next数组,求出匹配的位置,然后差分打上标记,出现的次数就是(减去长度差异之后的)前缀和的差。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!