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