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. python import引入不同路径下的模块

    转载 python 包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径. 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构: `- ...

  2. Ubuntu16.04配置Eclipse开发OpenCV

    系统环境 Ubuntu 16.04;  OpenCV2.4.13; Eclipse neon for C++ 配置步骤 1.配置JDK,此处配置的是JDK1.8,详见<Ubuntu 16.04 ...

  3. CSS存在形式的引用

    撰写个css文件 直接引用css文件样式的内容.本质是将css文件拿过来

  4. greendao3.2.0使用

    源代码地址 https://github.com/greenrobot/greenDAO buildscript { repositories { jcenter() mavenCentral() } ...

  5. numpy学习笔记(三)

    (1)numpy的位操作 序号         操作及描述 1.      bitwise_and 对数组元素执行位与操作 2.      bitwise_or 对数组元素执行位或操作 3.      ...

  6. linux服务之ntp与dns篇

    ntp复习: 简介:对于计算机时间的同步管理操作服务器 部署:(服务端和客户端或者说集群) 1.服务端下载ntp 2.打开配置文件/etc/ntp.conf: server 127.127.1.0  ...

  7. OpenStack Q版本新功能以及各核心组件功能对比

    OpenStack Q版本已经发布了一段时间了.今天, 小编来总结一下OpenStack Q版本核心组件的各项主要新功能, 再来汇总一下最近2年来OpenStack N.O.P.Q各版本核心组件的主要 ...

  8. html 设置input框的记忆功能(联想内容)

    autocomplete=“on/off” 1.默认情况下,autocomplete的值是on.你可以将其设置为off. 2.autocomplete属性可以放在input 元素上,也可以放在form ...

  9. java实现pdf按页切分成图片

    package com.ces.component.pictrueCut.entity; import java.awt.Image; import java.awt.Rectangle; impor ...

  10. filter in Servlet

    Servlet过滤器: Servlet过滤器是用于执行某些过滤任务的对象.过滤器可以应用于servlet,jsp或html. Servlet过滤器主要用于以下任务: 预处理: Servlet过滤器用于 ...