[洛谷2671]求和<前缀和&模拟>
题目链接: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]求和<前缀和&模拟>的更多相关文章
- 洛谷 P5594 【XR-4】模拟赛
洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...
- 洛谷P3434 [POI2006]KRA-The Disks [模拟]
题目传送门 KRA 题目描述 For his birthday present little Johnny has received from his parents a new plaything ...
- 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)
题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...
- 【洛谷】【前缀和+st表】P2629 好消息,坏消息
[题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...
- 洛谷 P2671 求和 解题报告
P2671 求和 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\) .每个格子上都染了一种颜色\(color_i\)用\([1,m]\)当中的一个整数表示),并 ...
- 洛谷P2671 求和 [数论]
题目传送门 求和 格式难调,题面就不放了. 分析: $ZYYS$的一道题. 很显然是大力推公式.我们分析一下题目,实际上限制条件就是:下标同奇偶且颜色相同的数,那么我们先拿这个公式$(x+z)*(nu ...
- 洛谷P4623 [COCI2012-2013#6] BUREK [模拟]
题目传送门 BUREK 格式难调,题面就不放了. 分析: 一道比较有思维难度的模拟题. 首先我们可以想到,对于一个三角形,可以画出一个最小矩形使得这个三角形被完全包围,并且这个矩形的边平行于坐标轴(图 ...
- 洛谷P1039 侦探推理(模拟)
侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...
- 洛谷 P4427 求和
传送门啦 思路: 开始不肿么容易想到用倍增,但是想到需要求 $ Lca $ ,倍增这种常数小而且快的方法就很方便了.求 $ Lca $ 就是一个最普通的板子.那现在考虑怎么求题目中的结果. 树上差分可 ...
随机推荐
- 前端每日实战:113# 视频演示如何用纯 CSS 创作一个赛车 loader
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/mGdXGJ 可交互视频 此视频是可 ...
- python之路-基本数据类型之list列表
1.概述 列表是python的基本数据类型之一,是一个可变的数据类型,用[]方括号表示,每一项元素使用逗号隔开,可以装大量的数据 #先来看看list列表的源码写了什么,方法:按ctrl+鼠标左键点li ...
- java并发编程基础概念
本次内容主要讲进程和线程.CPU核心数和线程数.CPU时间片轮转机制.上下文切换,并行和并发的基本概念以及并发编程的好处和注意事项,为java并发编程打下扎实基础. 1.什么是进程和线程 1.1 进程 ...
- Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果
axios interceptors 拦截器 //interceptors.js // vue axios配置 发起请求加载loading请求结束关闭loading // http request 请 ...
- Hadoop集群搭建(二)~centos6.8的安装
这篇记录在创建好的虚拟机中安装centos6.8 1,在虚拟机界面-选择编辑虚拟机设置 2,CD/DVD,选择使用ISO映像文件,找到安装包的位置,确定 3,回到虚拟机的界面,开启此虚拟机 4,安装 ...
- 有关KMP算法
KMP算法: 此算法的本质是首先对于模板字符串进行计算,生成一个数组(next数组),该数组反映了模板字符串的情况. 例: S: ABADACABABCD P: ABAB 当我们查询到P3与S3(B和 ...
- Python科学计算库SymPy初探
SymPy基础应用 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...
- java-字节流练习(新手)
参考手册: 关键字: FileInputStream() Input是从硬盘到内存 FileOutputStream() 而output是从内存到硬盘,所以实现了复制粘贴. read() 调用方法读取 ...
- OO课程的完结,软件工程学习的开始
目录 UML小结 阅读学习 大象:Thinking in UML UML精粹 UML和模式应用 本单元作业的架构设计 四个单元中架构设计及OO方法的演进 四个单元中测试与实践的演进 课程收获 三个具体 ...
- AspNetCore3.1_Secutiry源码解析_4_Authentication_JwtBear
title: "AspNetCore3.1_Secutiry源码解析_4_Authentication_JwtBear" date: 2020-03-22T16:29:29+08: ...