题目描述

奥利维尔和雪拉扎德在喝酒。
两人连喝$18$瓶后,奥利维尔最终倒下了。
奥利维尔服用了教会研究的醒酒药后,因为服用了太多产生了副作用,第二天睡不着了。
他只好用数数的方式度过无聊的时光,不过他毕竟是皇子,是不会数羊的。他会数数解决小面这个问题:
他先写下一个长度为$n$的数组$a$。一对数组中的数$\{a_x,a_y\}$被称为坏对,当且仅当$x<y$且$a_x\mod a_y=K$。那么有多少个连续子数组不包含坏对呢?


输入格式

一行包含两个整数,$n$和$K$。
第二行包含$n$个整数,表示数组$a$。


输出格式

输出一行包含答案。


样例

样例输入:

3 2
5 3 1

样例输出:

4


数据范围与提示

样例解释:

$\{5,3\}$是这个数组中唯一一个坏对。

数据范围:

对于$20\%$的数据,$1\leqslant n\leqslant 100$。
对于另外$30\%$的数据,$K=0$。
对于$100\%$的数据,$1\leqslant n\leqslant {10}^5,0\leqslant K\leqslant {10}^5,1\leqslant a_i\leqslant {10}^5$


题解

发现对于一个左端点,其合法区间的右端点一定是一个连续的段,而不能是断断续续的。

所以我们考虑维护合法区间。

$a_x\mod a_y=K$即为$(a_x-K)\mod a_y=0$。

那么我们可以将$a_x-K$分解质因数即可。

时间复杂度:$\Theta(n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
long long n,K,ans;
long long a[100001];
long long cnt[100001];
int main()
{
memset(cnt,0x3f,sizeof(cnt));
scanf("%lld%lld",&n,&K);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
long long lft=n,rht=n+1;
for(int i=n;i;i--)
{
if(a[i]==K)rht=min(lft,rht);
else
for(int j=1;j*j<=a[i]-K;j++)
{
if((a[i]-K)%j)continue;
if(j>K)rht=min(cnt[j],rht);
if((a[i]-K)/j>K)rht=min(cnt[(a[i]-K)/j],rht);
}
if(a[i]>K)lft=i;
cnt[a[i]]=i;
ans+=rht-i;
}
printf("%lld",ans);
return 0;
}

rp++

[CSP-S模拟测试]:喝喝喝(模拟)的更多相关文章

  1. [CSP-S模拟测试]:表达式密码(模拟)

    题目传送门(内部题87) 输入格式 从文件$expression.in$中读入数据.输入一行,一个字符串$S$,表示原表达式,保证为合法表达式 输出格式 输出到文件$expression.out$中. ...

  2. [CSP-S模拟测试]:天空龙(模拟)

    题目描述 奥西里斯之天空龙很喜欢颜色,有一天他找到了三种颜色——红黄蓝.奥西里斯有$a$个红色,$b$个黄色,$c$个蓝色,他想用画出最好的画,可是需要至少$x$个红色,$y$个黄色和$z$个蓝色,似 ...

  3. [CSP-S模拟测试]:折纸(模拟)

    题目描述 小$s$很喜欢折纸.有一天,他得到了一条很长的纸带,他把它从左向右均匀划分为$N$个单位长度,并且在每份的边界处分别标上数字$0\sim n$.然后小$s$开始无聊的折纸,每次他都会选择一个 ...

  4. [CSP-S模拟测试]:引子(大模拟)

    题目描述 网上冲浪时,$Slavko$被冲到了水箱里,水箱由上而下竖直平面.示意图如下: 数字$i$所在的矩形代表一个编号为$i$的水箱.1号水箱为水箱中枢,有水管连出.除了$1$号水箱外,其他水箱上 ...

  5. [CSP-S模拟测试]:Median(暴力+模拟)

    题目描述 定义两个数列: $$S=\{S(1),S(2),...,S(n)\}\text{和}S_2\{S_2(1),S_2(2),...,S_2(n)\}$$ $$S(k)=(p_k\times k ...

  6. [CSP-S模拟测试]:走格子(模拟+BFS+Dijkstra)

    题目描述 $CYJ$想找到他的小伙伴$FPJ$,$CYJ$和$FPJ$现在位于一个房间里,这个房间的布置可以看成一个$N$行$M$列的矩阵,矩阵内的每一个元素会是下列情况中的一种:$1.$障碍区域—这 ...

  7. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  8. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  9. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

  10. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

随机推荐

  1. CodeForce-1196D2-RGB Substring (hard version)

    原题链接 题目大意与上题完全一样,只是数据规模更大. 思路: 再用上题的暴力肯定TLE,所以需要优化一下搜索过程.上一题我们是外层遍历n,内层遍历3种情况.这题我们外层遍历3种情况,内层遍历数组,记录 ...

  2. 继承Process类,计算累加和以及阶乘

    #定义一个类 继承Process类 from multiprocessing import Process import os class Download(Process): def __init_ ...

  3. Pikachu漏洞练习平台实验——越权漏洞(八)

    1.概述 由于没有对用户权限进行严格的判断 导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作 水行越权:A用户和B用户属于同一级别用户,但各自不能操作对方个人信息.A用户如 ...

  4. vs code配置C/C++开发环境

    第一步:下载 Vs Code 点击链接下载Vs Code 下载版本  并安装 https://code.visualstudio.com/ 点击 Download for Windwos 安装时  如 ...

  5. Tcp协议介绍

    前情提要:根据域名建立tcp链接之前要做两件事情,1 根据arp协议找到网管mac地址 2 通过dns服务器解析出域名的Ip地址,解析出域名的Ip地址之后就可以建立tcp链接了. tcp协议三个特点: ...

  6. mybatis使用Dao和Mapper方式

    1.配置jdcp.properties数据库连接文件 #mysql database setting jdbc.type=mysql jdbc.driver=com.mysql.jdbc.Driver ...

  7. defer、panic和recover

    1. defer(1)defer用于将某个方法或语句推迟到当前函数返回的最后一刻执行,一般用于释放某些已分配的资源.函数返回的最后一刻指的是,return语句更新返回值变量之后,函数返回之前,所以de ...

  8. 循环冗余校验(CRC)

    冗余码 CRC和海明校验类似,也是有效信息(k位)+校验信息(r位),需要满足N=k+r≤2r-1 生成多项式G(X) 定义:收发双方约定的一个(r+1)位二进制数,发送方利用G(X)对信息多项式做模 ...

  9. 安装weblogic界面安装

    如果中间有任何问题请联系作者:291562721 界面安装weblogic首先 需要工具: 链接:https://pan.baidu.com/s/1x3uYxsnycjT2Xi2TOTbDdQ 提取码 ...

  10. Spring-DI控制反转和IOC依赖注入

    Spring-DI控制反转和IOC依赖注入 DI控制反转实例 IDEAJ自动导入Spring框架 创建UserDao.java接口 public interface UserDao { public ...