前言

题目链接:洛谷

题意简述

给出序列 \(a_1 \ldots a_n\) 和常数 \(l \leq n\),定义:

\[\operatorname{dis}(i, j) = \sum _ {k = 0} ^ {l - 1} [a_{i + k} \neq a_{j + k}] \qquad (i, j \in [1, n - l + 1])
\]

每次询问一个 \(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 题解的更多相关文章

  1. BZOJ5443:[CEOI2018]Lottery

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.lydsy.com/JudgeOnline/probl ...

  2. bzoj5000+的洛谷题号

    前言 闲得没事把 bzoj5000+ 在 Luogu 上可找到的题面整理了一下-- 对于我,bzoj 连账号都没有,所以肯定是不清楚 bzoj 题目总数的--因此其实就是手动翻查. 工作量很大,基本不 ...

  3. UVA10325 The Lottery(容斥原理)

    题意: 给n,m,和m个数(k1~km).求1~n中有多少个数不是(k1~km)中任意一数的倍数. 题解: 容斥模板题.反面考虑,a的倍数有n/a个:既是a,也是b的倍数,即lcm(a,b)的倍数有n ...

  4. EX14 彩票中奖 (lottery.pas/c/cpp)

    [题目描述]小明想试试运气去购买彩票,所以他开始研究彩票大乐透的玩法:超级大乐透是指由购买者从01—35共35个号码中选取5个号码为前区号码,并从01—12共12个号码中选取2个号码为后区号码组合为一 ...

  5. uva - The Lottery(容斥,好题)

    10325 - The Lottery The Sports Association of Bangladesh is in great problem with their latest lotte ...

  6. 浙大pat 1011题解

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  7. upc组队赛5 Ingenious Lottery Tickets【排序】

    Ingenious Lottery Tickets 题目描述 Your friend Superstitious Stanley is always getting himself into trou ...

  8. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  9. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  10. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. 图片预加载需要token认证的地址处理

    1.添加函数修改img的属性: /** * * @param {*} idName 传入的id,获取改img的dom,添加相应的数学 */ export const proxyImg = (idNam ...

  2. AES加密和解密,key需要32位

    AES加密和解密,key需要32位 package com.example.core.mydemo.sign; import org.apache.commons.codec.binary.Base6 ...

  3. 又跳槽!3年Java经验收割成都大厂的面试心得(干货满满&文末有福利)

    中厂->阿里->字节,成都->杭州->成都 系列文章目录和关于我 0.前言 笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到 ...

  4. 将强化学习重新引入 RLHF

    我们很高兴在 TRL 中介绍 RLOO (REINFORCE Leave One-Out) 训练器.作为一种替代 PPO 的方法,RLOO 是一种新的在线 RLHF 训练算法,旨在使其更易于访问和实施 ...

  5. DDD 笔记

    1. 简单讲讲DDD,和DDD哪些优势 领域驱动设计.就是通过领域来指导软件设计,是一种十分抽象的软件设计思想,它主要分为战略设计和战术设计 战略方面,通过事件风暴进行领域模型的划分,划分出核心域,子 ...

  6. 一文带你深入理解SpringMVC的执行原理

    今天大致来看一下Spring MVC的执行流程是什么样的 执行流程:也就是一个请求是怎么到我们Controller的,返回值是怎么给客户端的 本文分析的问题: 文件上传的请求是怎么处理的 跨域是怎么处 ...

  7. 3568F-系统启动阶段LOGO显示

  8. 薅 AWS 羊毛的船新方式,以 ChatBot 为例

    还在担心一年免费服务器到期后该怎么办?(Solo社区 投稿) 网上绝大多数薅 AWS 羊毛的教程都是在教大家如何申请创建一年免费的 VPS,太 OUT 了!就问一个问题,一年到期了那咋办? 其实,除了 ...

  9. .NET6 API 部署标准流程

    一.安装dotnet环境 #第一步:将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库 sudo rpm -Uvh https://packages.micr ...

  10. [oeasy]python0078_设置索引颜色_index_color_ansi_控制终端颜色

    更多颜色 回忆上次内容 上次 了解了 高亮颜色 91-97 是 高亮 前景色 101-107是 高亮 背景色 颜色种类 在原来基础上 增加了一些 但也非常有限 还想要 更精细的颜色 有可能吗?? 更多 ...