题目传送门(内部题102)


输入格式

  第一行三个正整数$n,k,q$,分别表示数列长度,操作长度和修改个数。
  第二行$n$个数,表示给出的终止数列。
  接下来$q$行,每行两个数$pos,dx$,表示将$a[pos]$加上$dx$,注意$dx$可能是负数。


输出格式

  输出共有$q+1$行,分别是初始时和每次修改后的答案。如果凉宫可以取胜,输出$Yes$,否则输出$No$。


样例

样例输入:

5 2 5
1 1 1 2 1
3 −1
1 −1
3 1
3 1
1 −1

样例输出:

Yes
No
No
No
Yes
No


数据范围与提示

样例解释:

  初始时,可以通过对$[1,2],[3,4],[4,5]$依次做$+1$操作得到;四次操作后,数列变为$[0,1,2,2,1]$,可以通过对$[2,3],[3,4],[4,5]$做$+1$操作得到。

数据范围:

  对于$10\%$的数据,满足$n=1,q=0$。
  对于$20\%$的数据,满足$n\leqslant 5,q=10$。
  对于$30\%$的数据,满足$n\leqslant 18,q=10$。
  对于$50\%$的数据,满足$n\leqslant 2,000,q\leqslant 2,000$。
  对于$70\%$的数据,满足$n\leqslant 100,000,q\leqslant 100,000$。
  对于$100\%$的数据,满足$k\leqslant n\leqslant 2\times 10^6,q\leqslant 2\times 10^6$,保证任何时候,$|a[i]|,|dx|\leqslant 10^9$。


题解

今晚是乱(mei)搞(lian)专题!

题目中的−是什么鬼?还好我眼尖一眼就看了出来。

首先,如果整个区间和不是$k$的倍数的话一定是$No$,然后我就发现大样例中$2000$组询问只有$4$个是$k$的倍数。

于是$n^2$暴力$+$剪枝直接$AC$。

时间复杂度:$\Theta(\omega n)$(其中$\omega$为询问中区间和是$k$的倍数的个数)。

期望得分:$50$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,k,q;
long long sum;
int a[2000010],b[2000010],s[2000010],sss;
int main()
{
scanf("%d%d%d",&n,&k,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
if(!k)
{
q++;
while(q--)puts("No");
return 0;
}
if(sum%k){puts("No");goto nxt3;}
sss=0;
for(int i=1;i<=n-k+1;i++)
{
sss+=s[i];
b[i]+=a[i]-sss;
sss+=b[i];
s[i+k]-=b[i];
b[i]=0;
}
for(int i=n-k+2;i<=n;i++)
{
sss+=s[i];
b[i]+=a[i]-sss;
if(b[i]!=0){puts("No");goto nxt1;}
}
puts("Yes");
nxt1:for(int i=1;i<=n;i++)b[i]=s[i]=0;
nxt3:;
while(q--)
{
int pos,dx;
scanf("%d%d",&pos,&dx);
sum+=dx;a[pos]+=dx;
if(sum%k){puts("No");goto nxt4;}
sss=0;
for(int i=1;i<=n-k+1;i++)
{
sss+=s[i];
b[i]+=a[i]-sss;
sss+=b[i];
s[i+k]-=b[i];
b[i]=0;
}
for(int i=n-k+2;i<=n;i++)
{
sss+=s[i];
b[i]+=a[i]-sss;
if(b[i]!=0){puts("No");goto nxt2;}
}
puts("Yes");
nxt2:for(int i=1;i<=n;i++)b[i]=s[i]=0;
nxt4:;
}
return 0;
}

rp++

[CSP-S模拟测试]:慢无止境的八月(乱搞)的更多相关文章

  1. [CSP-S模拟测试]:统计(树状数组+乱搞)

    题目传送门(内部题120) 输入格式 第一行,两个正整数$n,m$. 第二行,$n$个正整数$a_1,a_2,...,a_n$,保证$1\leqslant a_i\leqslant n$,可能存在相同 ...

  2. [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)

    题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...

  3. jzoj6003. 【THUWC2019模拟2019.1.16】Square (乱搞)

    题面 题解 不难发现,如果一行最后被染色,那么这行的颜色肯定一样,如果倒数第二个被染色,那么除了被最后一个染色的覆盖的那一部分剩下的颜色肯定一样 于是题目可以转化为每一次删去一行或一列颜色相同的,问最 ...

  4. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  5. csp-s模拟测试94

    csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...

  6. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  7. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

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

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

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

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

随机推荐

  1. Autofac通过配置的方式

    autofac是比较简单易用的IOC容器.下面我们展示如何通过json配置文件,来进行控制反转. 需要用到以下程序集.可以通过nugget分别安装 Microsoft.Extensions.Confi ...

  2. asp.net 3.三层架构

    1.新建项目和类库 CZBK.ItcastProject (空白项目) CZBK.ItcastProject.BLL (类库) -- 逻辑业务 CZBK.ItcastProject.Common (类 ...

  3. ES6入门二:默认值与默认值表达式

    默认值 默认值表达式 需要注意的是,这种默认值和默认表达式在IE的最新版本中仍然没有得到兼容,只能通过编译转码的方式降级到ES5使用. 一.默认值 在函数声明时可以给形参赋默认值,当调用函数时不传入或 ...

  4. idea 党用快捷键

    实用快捷键: Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )Ctrl+D 复制行Ctrl+X 删除行快速修复 alt+enter (modify/cast)代码提示 a ...

  5. python连接postgres方法

    Python使用PyGreSQL操作PostgreSQL: import pg def operate_postgre_tbl_product(): try: #db = pg.connect(dbn ...

  6. Java并发与多线程

    1. 并发与并行 并发是指某个时间段内,多任务交替处理的能力:并行是指同时处理多任务的能力,多核CPU可以实现并行任务. 并发执行的特点: (1)并发程序间相互制约:程序执行结果的相互依赖以及共享资源 ...

  7. mysql_jdbc连接说明

    mysql JDBC Driver 常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysq ...

  8. 在不同的Linux发行版上安装TFTP Server

    http://www.davidsudjiman.info/2006/03/27/installing-and-setting-tftpd-in-ubuntu/ http://www.cybercit ...

  9. Java 基本的数据类型(8种)

    1.Java 基本的数据类型(8种) 整型:byte .short .int .long 浮点型:float .double 字符型:char 布尔型:boolean

  10. python函数:函数参数、对象、嵌套、闭包与名称空间、作用域

    今天的内容整理共有5部分 一.命名关键字参数 二.函数对象 三.函数的嵌套 四.名称空间与作用域 五.闭包函数 一.命名关键字参数 # 命名关键字参数: 在定义函数时,*与**之间参数称之为命名关键字 ...