又是回忆场。
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数组,求出匹配的位置,然后差分打上标记,出现的次数就是(减去长度差异之后的)前缀和的差。