题目传送门(内部题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. List 集合 一行4个排序

    List<string> list = new List<string>(); ; i < ; i++) { list.Add(i.ToString()); } int ...

  2. 排好序的数组中,找出两数之和为m的所有组合

    public static void main(String[] args) { int[] a = {1,2,2,3,3,4,5,6}; int m = 6; normal(a, m); } //正 ...

  3. 你不知道的css各类布局(四)之响应式布局

    响应式布局 概念 响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局 布局特点 响应式设计的目标是确保一个页面在所有终端上(各种尺寸的PC.手机.手表.冰箱的Web浏览器等等)都能显示出令人满意的效 ...

  4. JS基础_基本数据类型和引用数据类型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 使用SSH连接AWS服务器

    使用SSH连接AWS服务器 一直有一台AWS云主机,但是之前在Windows平台都是使用Xshell连接的,换到Ubuntu环境之后还没有试,昨天试了一下,终于使用SSH连接成功了,这里记录一下步骤: ...

  6. python之字符串类型及其操作

    1.1字符串类型的表示 字符串是字符的序列表示,可以由一对单引号('). 双引号(")或三引号(’")构成.其中,单引号和双引号都可以表示单行字符串,两者作用相同.使用单引号时,双 ...

  7. java字符串大小写转换

    String test="SHA34cccddee";    System.out.println(test.toUpperCase());//小写转大写 String test= ...

  8. 使用webpack + momentjs时, 需要注意的问题

    注意开发HTML页面charset, 如是不是utf-8, 比如是shift_jis,  一般会在webpack里用插件EncodingPlugin把开发的utf-8格式转码成shift_jis格式 ...

  9. js页面加载时候的调用函数的方法

    方法一:jquery 中:$(function(){}) 括号内写你的内容 方法二:html <body onload=''> <script type="text/jav ...

  10. 4.Linux用户与权限管理

    Linux 系统是一个多用于多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统 新增用户: useradd  新用户名 设置密码:pa ...