题目链接:https://www.luogu.org/problemnew/show/P2671

这是noip2015普及组的第三题,谁说的普及组的题就一定水的不行,这道题就比较有意思的

这道题的暴力想法就是双重循环寻找所有情况

但是这会爆时间的

--------------------------

做这题,需要找到一个结论

y-x=z-y的意思其实是x+z是偶数,也就是x,z是同奇偶的

这个结论有了当然就可以暴力了,虽然不能过

正解的思路

我们首先对每一个数来查找他的贡献。。。

但是单纯的查找贡献可能就和暴力一样了,所以我们针对第z个数,查找在他之前的数,和他配对后对答案的贡献。因为这样还是一定是可以达到目标配对数,不重不漏

对于一组x,z(1<=x<z),z的贡献是(xi+z)*(num[xi]+num[z])

然后z的总贡献就是Σ((xi+z)*(num[xi]+num[z]))其中xi满足xi和z同奇偶并且颜色相同

把这个式子打开就是

Σ(xi*num[i])+Σ(xi)*num[z]+Σ(num[xi])*z+count*z*num[z]

所以正解其实就是不断的加上这个式子

接下来一个问题就是如何储存这些Σ。。。

当然很容易想到的就是前缀和了

我们定义st[w1][w2][4]数组

w1为0表示偶数,1表示奇数

w2表示颜色

最后那一维:

0   表示奇偶颜色相同的情况下,满足条件的个数

1 表示奇偶颜色相同的情况下,满足条件的数的序号和

2 表示奇偶颜色相同的情况下,满足条件的数的价值和

3 表示奇偶颜色相同的情况下,满足条件的数的(价值*序号)的和

这是一个暴力打法,部分分

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstdlib>
#define maxn 100005
#define mod 10007
using namespace std; int num[maxn],col[maxn];
int n,x,z,m,ans; int main(){
cin>>n>>m;
for(int i=;i<=n;i++){
cin>>num[i];
}
for(int i=;i<=n;i++)cin>>col[i];
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j+=){
if(col[i]==col[j]){
ans=(ans+(((i+j)%mod)*((num[i]+num[j]))%mod)%mod)%mod;
}
}
}cout<<ans;
}

这是AC的前缀和版本

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<queue>
#define maxn 100005
#define mod 10007
#define ll long long
using namespace std; int st[][maxn][];
int col[maxn],num[maxn],n,m;
ll ans; int read() {
int xx=,ff=;char ch=getchar();
while(ch<''||ch>'') {if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<='') {xx=xx*+ch-'';ch=getchar();}
return xx*ff;
} int main() {
n=read();
m=read();
for(int i=; i<=n; i++)num[i]=read()%mod;
for(int i=; i<=n; i++)col[i]=read();
for(int i=; i<=n; i++) {
int w1=i%,w2=col[i];
int x=i%mod,v=num[i]%mod;
int a,b,c,d;
//同类数量 同类的序号和 同类的价值和 同类的价值*序号和
a=st[w1][w2][]%mod;b=st[w1][w2][]%mod;c=st[w1][w2][]%mod;d=st[w1][w2][]%mod;
st[w1][w2][]++; st[w1][w2][]%=mod;
st[w1][w2][]+=x; st[w1][w2][]%=mod;
st[w1][w2][]+=v; st[w1][w2][]%=mod;
st[w1][w2][]+=x*v%mod; st[w1][w2][]%=mod;
ans=(ans%mod+d%mod)%mod;
ans=(ans%mod+((a*x%mod)*v)%mod)%mod;
ans=(ans%mod+(b*v)%mod)%mod;
ans=(ans%mod+(c*x)%mod)%mod;
}
printf("%lld",ans);
}

[洛谷2671]求和<前缀和&模拟>的更多相关文章

  1. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  2. 洛谷P3434 [POI2006]KRA-The Disks [模拟]

    题目传送门 KRA 题目描述 For his birthday present little Johnny has received from his parents a new plaything ...

  3. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

  4. 【洛谷】【前缀和+st表】P2629 好消息,坏消息

    [题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...

  5. 洛谷 P2671 求和 解题报告

    P2671 求和 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\) .每个格子上都染了一种颜色\(color_i\)用\([1,m]\)当中的一个整数表示),并 ...

  6. 洛谷P2671 求和 [数论]

    题目传送门 求和 格式难调,题面就不放了. 分析: $ZYYS$的一道题. 很显然是大力推公式.我们分析一下题目,实际上限制条件就是:下标同奇偶且颜色相同的数,那么我们先拿这个公式$(x+z)*(nu ...

  7. 洛谷P4623 [COCI2012-2013#6] BUREK [模拟]

    题目传送门 BUREK 格式难调,题面就不放了. 分析: 一道比较有思维难度的模拟题. 首先我们可以想到,对于一个三角形,可以画出一个最小矩形使得这个三角形被完全包围,并且这个矩形的边平行于坐标轴(图 ...

  8. 洛谷P1039 侦探推理(模拟)

    侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...

  9. 洛谷 P4427 求和

    传送门啦 思路: 开始不肿么容易想到用倍增,但是想到需要求 $ Lca $ ,倍增这种常数小而且快的方法就很方便了.求 $ Lca $ 就是一个最普通的板子.那现在考虑怎么求题目中的结果. 树上差分可 ...

随机推荐

  1. Java - 常见的算法

    二分法查找 private static int binarySearch(int[] list,int target) { ; ; //直到low>high时还没找到关键字就结束查找,返回-1 ...

  2. 菜鸟系列Golang学习 — 切片

    切片简介 切片也是一种数据类型,在Golang中,切片底层基于数组实现的. 我们定义切片如下 var slice []int 切片之所以出现,是为了更好的利用资源,管理数据,如果使用数组,则我们一开始 ...

  3. 修复Nginx的WebDAV功能

    如果想使用WebDAV来实现文件共享,尤其是想使用操作系统内置功能来挂载文件系统的话,省心的话还是用Apache吧. 下文介绍如何用Nginx来实现这个目标.Windows内置的客户端是Microso ...

  4. sonarqube配置全指南,集成阿里巴巴p3c规范

    环境准备 内置数据库 Sonar安装成功后,默认内置H2数据库,用于记录单次的扫描结果,对同一个project重复扫码,会覆盖之前的扫描记录,所以H2 数据库只应用于测试,不可以用于生产环境,那如果你 ...

  5. plist 图集 php 批量提取 PS 一个个切

    最近,迷上了用 cocos2d 做游戏开发.由于是新入门,很多东西从头开始学. 在使用 sprite 的 Rect 裁剪显示的时候,显示总是多一块.所以,要从图集中提取一张张图,这样就省了裁剪. 原图 ...

  6. Mac上Burpsuite 拦截不到HTTPS流量怎么设置

    在百度了一堆以及修修改改下终于拦截到HTTPS流量了. 安装步骤就大致讲一下吧 网上下载burp的安装包,然后Mac上直接打开这个burpUnlimited.jar包就可以了 我直接选择的第一个   ...

  7. 《ASP.NET Core 3框架揭秘》博文汇总

    在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的<ASP.NET Core 3框架揭秘>(博文只能算是"初稿",与书 ...

  8. Top命令你最少要了解到这个程度

    top命令几乎是每个程序员都会用到的Linux命令.这个命令用来查看Linux系统的综合性能,比如CPU使用情况,内存使用情况.这个命令能帮助我快速定位程序的性能问题. 虽然这个命令很重要,但是之前对 ...

  9. Qt5小Demo之猜数字游戏

    玩法:设定时间进行猜数字,所猜数字为一个四位数,输入自己的数字,系统会提示是大了还是小了,依据条件逐步逼近正确结果.在规定时间里猜对即获胜,否则即失败. 平台支持:Win10下测试正常. 源码地址: ...

  10. C/C++、C#、JAVA(一):代码模板与库代码的引入

    代码默认模板 编译性高级编程语言中,几乎每种语言,都有个静态的 main 方法作为程序启动入口,每种语言都有其编写规范.为了学习 C/C++.C#.JAVA四种语言,我们要先从默认代码模板中,慢慢摸索 ...