Solution

我又双叒叕去看题解啦$QAQ$, 真的想不到鸭

输入 $a$ 和 $n$ 互质, 所以满足 $a \times i \ mod \ n$ $(0<=i<n)$ 肯定是不重复的

根据这一个性质 , 设 满足条件的子串的开头位置为 $s$

先不考虑$01$, 仅考虑开头位置上的值 $a*s+b$, 设它为$x$, 则它接下来第 $i$ 位的值为 $x+(i-1)*a$

若那个位置上的字符为 $0$, 则 $0<=x+(i-1)*a<p$, 反之 $p<=x+(i-1)*a<n$

就可以列出$m$个不等式, 根据这$m$个不等式, 可以解出满足条件的$x$的范围和个数, 而 $x$ 与 开头位置$s$ 一 一对应, $x$的个数即为答案

但是实现解不等式的交集会比较麻烦, 所以先解出不满足条件的 $x$, 取并集

最后$m-1$个位置需要特别加入并集

Code

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
#define R register
#define ll long long
using namespace std; int n, a, b, p, m, tot, cnt;
char s[N]; struct qj {
int s, t; bool operator < (const qj &b) const {
return s < b.s;
} }bt[N << ]; inline int cmax(int A, int B) {
return A > B ? A : B;
} int main()
{
scanf("%d%d%d%d%d", &n, &a, &b, &p, &m);
char ch = getchar();
while (ch != '' && ch != '') ch = getchar();
while (ch == '' || ch == '') s[++cnt] = ch, ch = getchar();
for (R int i = , j = ; i <= m; ++i, j = (j + a) % n) {
ll x, y;
if (s[i] == '') {
x = (p - j + n) % n;
y = (- - j + n) % n;
}
else {
x = ( - j + n) % n;
y = (p - - j + n) % n;
}
if (x <= y) {
bt[++tot].s = x;
bt[tot].t = y;
}
else {
bt[++tot].s = ; bt[tot].t = y;
bt[++tot].s = x; bt[tot].t = n - ;
}
}
for (R int i = n - m + , j = 1ll * i * a % n; i < n; ++i, j = (j + a) % n)
bt[++tot].s = (j + b) % n,
bt[tot].t = bt[tot].s;
sort(bt + , bt + + tot);
int ans = , maxn = -;
for (R int i = ; i <= tot; ++i) {
if (bt[i].s > maxn) ans += bt[i].s - maxn - ;
maxn = cmax(maxn, (int)bt[i].t);
}
if (maxn < n) ans += n - maxn - ;
printf("%d\n", ans);
}

BZOJ4377 Kurs szybkiego czytania \ Luogu 3589[POI2015]KUR - 数学思维题的更多相关文章

  1. BZOJ4377 : [POI2015]Kurs szybkiego czytania

    因为$a$与$n$互质,所以对于$0$到$n-1$里每个$i$,$ai\bmod n$的值互不相同. 设匹配成功的起点为$i$,那么可以得到$3m$段$ai\bmod n$的值不能取的禁区,每段都是连 ...

  2. BZOJ4377[POI2015]Kurs szybkiego czytania——数学思维题

    题目描述 给定n,a,b,p,其中n,a互质.定义一个长度为n的01串c[0..n-1],其中c[i]==0当且仅当(ai+b) mod n < p.给定一个长为m的小01串,求出小串在大串中出 ...

  3. @bzoj - 4377@ [POI2015] Kurs szybkiego czytania

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 n, a, b, p,其中 n, a 互质.定义一个长度为 ...

  4. luogu P3592 [POI2015]MYJ

    题目链接 luogu P3592 [POI2015]MYJ 题解 区间dp 设f[l][r][k]表示区间l到r内最小值>=k的最大收益 枚举为k的位置p,那么包含p的区间答案全部是k 设h[i ...

  5. BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386 (luogu) https://www.luogu.org/pro ...

  6. Luogu 3594 [POI2015]WIL-Wilcze doły

    简单题. 考虑没有修改数字的条件的限制,我们直接用双指针扫描就可以计算出答案了. 然后考虑加入修改数字的条件,只要用单调队列维护出当前两个指针表示的区间中长度为$d$的一段区间的最大值,用总和减掉这个 ...

  7. Luogu 3586 [POI2015]LOG

    考虑离散化后开权值线段树. 设序列中不小于$s$的数有$cnt$个,小于$s$的数的和为$sum$. 那么操作Z能成功的充要条件是$sum \geq (c - cnt) * s$. 如果序列中不小于$ ...

  8. Luogu 1031 - 均分纸牌 - [有意思的思维题]

    题目链接:https://www.luogu.org/problemnew/show/P1031 题目描述有 $N$ 堆纸牌,编号分别为 $1,2,…,N$.每堆上有若干张,但纸牌总数必为 $N$ 的 ...

  9. Luogu 1583 - 魔法照片 - [简单排序题]

    题目链接:https://www.luogu.org/problemnew/show/P1583 题目描述一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...

随机推荐

  1. vs2015 加载项目的时启动:无法启动 IIS Express Web 服务器

    使用Visual Studio 2015 运行ASP.NET项目时,提示“无法启动IIS Express Web服务器”,无法运行,如图: 一般出现在重装系统之后,或者项目是从别的电脑上复制过来的.解 ...

  2. Python递归解压缩多级.zip压缩包

    参考如下代码(from:https://stackoverflow.com/questions/36285502/how-to-extract-zip-file-recursively-in-pyth ...

  3. Ubuntu 16.04 LTS 常用快捷键

    在Linux下Win键就是Super键 启动器 Win(长按) 打开启动器,显示快捷键 Win + Tab 通过启动器切换应用程序 Win + 1到9 与点击启动器上的图标效果一样 Win + Shi ...

  4. JNDI在Spring和tomcat下的使用

    1. 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一.JNDI 在 J2EE 中的角色就是&q ...

  5. python:推导式套路

    推导式套路 列表推导式为例的推导式详细格式,同样适用于其他推导式 variable = [out_exp_res for out_exp in input_list if out_exp == 2] ...

  6. beef + msf 实现内网渗透

    在内网渗透方面,最为大众所知道的就是xp系统的ms08067漏洞,通过这个漏洞可以对未打上补丁的xp系统实现getshell, 但是经过笔者发现,这种漏洞攻击在被攻击机开上windows防火墙的时候是 ...

  7. 2、初探 ZooKeeper 技术内幕

    分布式一致性 “分布式” 是大型系统实现高性能.高可用所常用的架构手段,本章节将概述 “分布式一致性”的基本内容,以作为 ZAB 算法阐述的基础. 分布式一致性的基本概念 数据库系统的基础理论中,“事 ...

  8. [SQL]某数据库中查出包含 字段名 的所有表名

    --利用SQL语句来查询字段所在的表 --从某数据库中查出包含 字段名 字段的所有表名 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE ...

  9. Flume架构

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统: Flume 介绍 Flume是由cloudera软件公司产出的高可用.高可靠.分布式的海量日志收集系 ...

  10. 【产品设计】【转】APP界面设计规范编写指南(人人都是产品经理)

    转自 :http://www.woshipm.com/ucd/608557.html 作者:EID_UX_DESIGN,微信公众号:EID_center 原文地址:http://www.ui.cn/d ...