[CEOI2018] Lottery 题解
前言
题目链接:洛谷。
题意简述
给出序列 \(a_1 \ldots a_n\) 和常数 \(l \leq n\),定义:
\]
每次询问一个 \(k\),求对于所有 \(i \in [1, n - l + 1]\),求 \(\sum \limits _ {j \neq i} [\operatorname{dis}(i, j) = k]\)。
题目分析
暴力不用说,考虑如何优化。这类问题我们思考能不能省略重复的计算。例如,对于 \(l_1 \sim r_1\) 和 \(l_2 \sim r_2\) 的 \(\operatorname{dis}\) 已经求出,那么对于 \(l_1 + 1 \sim r_1 + 1\) 和 \(l_2 + 1 \sim r_2 + 1\) 的 \(\operatorname{dis}\) 只需要在原来基础上减去 \([l_1 \neq l_2]\),再加上 \([r_1 + 1 \neq r_2 + 1]\)。是 \(\Theta(1)\) 的。
具体地讲,对于这两个区间,它们的差值的可能性是 \(\Theta(n)\) 的,我们枚举这个差值,然后将这两个区间向右平移,用上述算法计算,并累加。注意到这样会不重不漏地统计到每一个区间的答案。时间复杂度 \(\Theta(n ^ 2)\)。
另外,由于特殊的空间限制,不妨将询问离线并离散化,空间复杂度就降到了 \(\Theta(nq)\)。
代码
略去了快读快写。
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, q, val[10010];
int cnt[110][10010];
int qry[110], rq[110], who[10010];
signed main() {
fread(buf, 1, MAX, stdin);
read(n), read(m);
for (int i = 1; i <= n; ++i) read(val[i]);
read(q);
for (int i = 1; i <= q; ++i) read(qry[i]), rq[i] = qry[i];
sort(rq + 1, rq + q + 1);
for (int i = 1; i <= q; ++i) who[rq[i]] = i;
who[m + 1] = q + 1;
for (int i = m; i >= 0; --i) !who[i] && (who[i] = who[i + 1]);
for (int i = 1; i + m <= n; ++i) { // 两个区间的差
int tot = 0;
for (int j = 1; j <= m; ++j) tot += val[j] != val[j + i];
for (int l1 = 1, r1 = m, l2 = 1 + i, r2 = m + i; r2 <= n; ++l1, ++l2, ++r1, ++r2) {
++cnt[who[tot]][l1], ++cnt[who[tot]][l2];
tot -= val[l1] != val[l2];
tot += val[r1 + 1] != val[r2 + 1];
}
}
for (int i = 1; i <= q; ++i)
for (int j = 1; j + m - 1 <= n; ++j)
cnt[i][j] += cnt[i - 1][j];
for (int i = 1; i <= q; ++i) {
for (int j = 1; j + m - 1 <= n; ++j)
write(cnt[who[qry[i]]][j]), putchar(' ');
putchar('\n');
}
fwrite(obuf, 1, o - obuf, stdout);
return 0;
}
后记 & 反思
考虑重复计算并优化是关键。另外,枚举两个区间的位置关系,并做到不重不漏的统计也是值得注意的。
[CEOI2018] Lottery 题解的更多相关文章
- BZOJ5443:[CEOI2018]Lottery
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.lydsy.com/JudgeOnline/probl ...
- bzoj5000+的洛谷题号
前言 闲得没事把 bzoj5000+ 在 Luogu 上可找到的题面整理了一下-- 对于我,bzoj 连账号都没有,所以肯定是不清楚 bzoj 题目总数的--因此其实就是手动翻查. 工作量很大,基本不 ...
- UVA10325 The Lottery(容斥原理)
题意: 给n,m,和m个数(k1~km).求1~n中有多少个数不是(k1~km)中任意一数的倍数. 题解: 容斥模板题.反面考虑,a的倍数有n/a个:既是a,也是b的倍数,即lcm(a,b)的倍数有n ...
- EX14 彩票中奖 (lottery.pas/c/cpp)
[题目描述]小明想试试运气去购买彩票,所以他开始研究彩票大乐透的玩法:超级大乐透是指由购买者从01—35共35个号码中选取5个号码为前区号码,并从01—12共12个号码中选取2个号码为后区号码组合为一 ...
- uva - The Lottery(容斥,好题)
10325 - The Lottery The Sports Association of Bangladesh is in great problem with their latest lotte ...
- 浙大pat 1011题解
With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...
- upc组队赛5 Ingenious Lottery Tickets【排序】
Ingenious Lottery Tickets 题目描述 Your friend Superstitious Stanley is always getting himself into trou ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- HttpServletRequest获取header参数 sign
HttpServletRequest获取header参数 sign //从请求头中获取参数 private static Map<String, String> getHeaders(Ht ...
- java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $ pack ...
- Linux chmod -bash: ./xx.sh: Permission denied的解决方案
Linux -bash: ./xx.sh: Permission denied的解决方案启动tomcat命令:./startup.sh之后提示-bash: ./startup.sh: Permissi ...
- iOS:长图切割并转为动画gif——精灵表单sprite Sheet的转化
iOS:长图切割并转为动画gif--精灵表单sprite Sheet的转化 通常的,iOS显示gif可以将文件转为NSData后再对其进行解析,通过CADisplayLink逐帧进行提取.播放,判断N ...
- 在SMT32程序HEX文件中加入固件版本信息
将固件版本信息定义成一个常量存放在程序中,需要的时候可以通过串口等接口查询代码版本信息,另一种,是利用编译器的语法,将固定的信息保存到某地. #define VERINFO_ADDR_BASE (0x ...
- 全志科技T3国产工业评估板规格书(四核ARM Cortex-A7,主频1.2GHz)
1 评估板简介 创龙科技TLT3-EVM是一款基于全志科技T3处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,每核主频高达1.2GHz,由核心板和评估底板组成. 评估板接口资源丰富, ...
- 继续我们的复习之路——webapi
前面断更几天是因为在住安心复习DOM BOM的内容 不得不说 还得是DOM 在这一章节的复习内容中 涌现出了很多又代表意义 经典的一些小案例 而且 还是有些难度的 有一两个我反正是自己独立完成不了 ...
- QEMU + Vscode + Arm Arch's Linux调试小记
QEMU + Vscode + Arm Arch's Linux调试小记 前几天看到了一篇讲授如何调试ARM Linux内核的文章,这里现在记录一下调试ARM Linux内核的办法 下载QEMU ...
- NewStarCTF 2023 week1
NewStarCTF 2023 WEEK1|CRYPTO brainfuck http://bf.doleczek.pl/ flag{Oiiaioooooiai#b7c0b1866fe58e12} C ...
- [HDCTF 2023]BabyMisc
BabyMisc ...脑洞坑题(如果7z密码不是那一串超长字符串真不至于0解) 先打开Script.zip,随便打开一个文件夹,得到的是pxx的文件,内容为16进制字节.猜测pxx为对应字节的位置 ...