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

定义一种特殊的三元组:\((x,y,z)\),其中\(x,y,z\)都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:
\(xyz\)是整数,\(x<y<z,y-x=z-y\)
\(colorx=colorz\)
满足上述条件的三元组的分数规定为\((x+z) \times (number_x+number_z)\)。整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以\(10,007\)所得的余数即可。
输入格式
第一行是用一个空格隔开的两个正整数\(n\)和\(m,n\)表纸带上格子的个数,\(m\)表纸带上颜色的种类数。
第二行有\(n\)用空格隔开的正整数,第\(i\)数字\(number\)表纸带上编号为\(i\)格子上面写的数字。
第三行有\(n\)用空格隔开的正整数,第\(i\)数字\(color\)表纸带上编号为\(i\)格子染的颜色。
输出格式
一个整数,表示所求的纸带分数除以\(10007\)所得的余数。
样例 #1
样例输入 #1
6 2
5 5 3 2 2 2
2 2 1 1 2 1
样例输出 #1
82
样例 #2
样例输入 #2
15 4
5 10 8 2 2 2 9 9 7 7 5 6 4 2 4
2 2 3 3 4 3 3 2 4 4 4 4 1 1 1
样例输出 #2
1388
提示
【输入输出样例 1 说明】
纸带如题目描述中的图所示。
所有满足条件的三元组为: \((1, 3, 5), (4, 5, 6)\)。
所以纸带的分数为\((1 + 5) \times (5 + 2) + (4 + 6) \times (2 + 2) = 42 + 40 = 82\)。
对于第 \(1\) 组至第 \(2\) 组数据, \(1 ≤ n ≤ 100, 1 ≤ m ≤ 5\);
对于第$ 3$ 组至第 \(4\) 组数据, \(1 ≤ n ≤ 3000, 1 ≤ m ≤ 100\);
对于第 \(5\) 组至第$ 6 $组数据, \(1 ≤ n ≤ 100000, 1 ≤ m ≤ 100000\),且不存在出现次数超过$ 20 $的颜色;
对 于 全 部 \(10\) 组 数 据 , \(1 ≤ n ≤ 100000, 1 ≤ m ≤ 100000, 1 ≤ color_i ≤ m,1≤number_i≤100000\)
思路
一开始想到\(O(n^2)\)的算法。
\(\because y-x=z-\)
\(\therefore x + z=2\times y\)
所以暴力枚举\(x,z\)就好了。但是肯定会\(TLE\)。
我们把所有数按颜色分成\(m\)组,然后为了枚举下标再开两个位置来判断下标的奇偶性(因为前面\(x+z=2\times y\),所以\(x,z\)奇偶性相同)。
假设一组里的数分别是\(x_1,x_2,\cdots,x_k\),下标是\(y_1,y_2,\cdots,y_k\)
那么答案\(=(x_1 + x_2) \times (y_1 + y_2) + (x_1 + x_3) \times (y_1 + y_3)+\dots\)
\(~~~~~~~~~~~~~=x_1\times(y_1 + y_2 + y_1 + y _ 3 + \cdots + y_1 + y_k) + x_2\times(y_2 + y_1 + y_2 + y _ 3 + \cdots + y_2 + y_k) + \cdots + x_k\times(y_k + y_1 + y_k + y _ 2 + \cdots + y_k + y_{k-1})\)
\(~~~~~~~~~~~~~=x_1\times(y_1 \times (k - 2) + \sum\limits_{i=1}^k{y_i}) + x_2\times(y_2 \times (k - 2) + \sum\limits_{i=1}^k{y_i}) + \cdots + x_k\times(y_k \times (k - 2) + \sum\limits_{i=1}^k{y_i})\)
这里每一个式子里都有\(\sum\limits_{i=1}^k{y_i})\),所以我们可以提前与处理一下,加快速度。
我们可以枚举所有数,第\(i\)数都加上\(x_i\times(y_i \times (k - 2) + \sum\limits_{i=1}^k{y_i})\)即可,最后全部加上模上\(10007\)即可
可以依据代码来理解,我觉得挺有必要。
代码
#include <iostream>
using namespace std;
const int N = 100010,MOD = 10007;
int n,m;
int a[N],color[N];
int s[N][2],sum[N][2];
int main () {
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> a[i];
for (int i = 1;i <= n;i++) {
cin >> color[i];
s[color[i]][i % 2]++;
sum[color[i]][i % 2] = (sum[color[i]][i % 2] + i) % MOD;
}
int ans = 0;
for (int i = 1;i <= n;i++) ans = (ans + a[i] * (i * (s[color[i]][i % 2] - 2) % MOD + sum[color[i]][i % 2]) % MOD) % MOD;
cout << ans << endl;
return 0;
}
P2671 [NOIP2015 普及组] 求和的更多相关文章
- [NOIP2015普及组]求和
题目 题目描述 一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子上都染了一种颜色color_i用[1,m]当中的一个整数表示),并且写了一个数字numberi. 定义一种特殊的三元组: ...
- NOIP2015普及组总结
NOIP2015普及组总结 这次考试总体感觉不错,不过觉得时间有点紧,在最后30分钟才打完. 第一题(金币coin):大大的W!爆搜O(N),一分钟打完: 第二题(扫雷游戏mine):同上: 第三题( ...
- [NOIP2015 普及组] 扫雷游戏
[NOIP2015 普及组] 扫雷游戏 难度:入门 题目描述 扫雷游戏是一款十分经典的单机小游戏.在nn行mm列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开 ...
- NOIP2015普及组第四题推销员
好久没有写博客了,今天再写一篇.还是先看题: 试题描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有 N 家 ...
- 洛谷【P2669】NOIP2015普及组 T1金币
我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P266 ...
- NOIP2015 普及组 洛谷P2671 求和 (数学)
一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...
- [NOIP2015] 普及组
金币 模拟 #include<iostream> #include<cstdio> using namespace std; int main(){ int k,n; scan ...
- NOIP2015 普及组(Junior) 解题报告
1. 金币 (coin.cpp/c/pas) 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币 ...
- NOIP2015普及组复赛A 推销员
题目链接:https://ac.nowcoder.com/acm/contest/243/A 题目大意: 略 分析: 方法就是把疲劳值从小到大排个序,然后从尾部开始一个一个取,当选到第i(i > ...
- 【NOIP2015普及组】推销员_详解
题目 题目大意 阿明是一名推销员--螺丝街是一条直线,一端有入口,一共有 \(N(<100,000)\) 家住户,第 \(i\) 家住户到入口的距离为 \(S_i\) 米.由于同一栋房子里可以有 ...
随机推荐
- P1068 [NOIP2009 普及组] 分数线划定 题解
目录 题目 思路 code 题目 P1068 [NOIP2009 普及组 思路 算出人数 排序 输出 如果同分也输出 否则break code #include<bits/stdc++.h> ...
- HTML多媒体
多媒体(一).插入音频.视频和flash在网页中插入音频.视频和flash都是使用embed标签. 语法: <embed src="多媒体文件地址" width=" ...
- String.prototype.replace--替换字符串
str.replace(regexp|substr, newSubStr|function) API本身不改变原本的字符串,只是返回新的字符串例子:用函数作为第二个参数function rep ...
- shell中;与&&的区别
&& 后一个命令执行需要依赖前一个命令执行成功 :各个命令都会依次执行,无论成功与否
- maven的安装 仓库的种类和彼此的关系
maven的安装 maven 仓库的种类和彼此的关系 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找 默认本地仓库位置在 ${ ...
- Count Triplets That Can Form Two Arrays of Equal XOR
Count Triplets That Can Form Two Arrays of Equal XOR 题意 给定一个数组,求多少个三元对\((i,j,k)\)满足\(S(i,j-1)=S(j,k) ...
- Navicate 链接 MySQL8.0版本 连接报错问题 1251错误,Clinent does not support authentication protocol requested by server
网上查到的原因是: mysql8 之前的版本中加密规则是mysql_native_password: mysql8之后,加密规则是caching_sha2_password: 找到的解决方法是: 把m ...
- luogu 3676小清新数据结构题
真·小清新... 其实本题正解是动态点分治,但是考虑到那个东西需要先大力推导一波再套上一个幻想乡战略游戏的搞法,所以还不如大力推导一波,然后无脑套上一个树剖+线段树写法... 首先我们考虑没有换根操作 ...
- es6中箭头函数和this指向
箭头函数相当于匿名函数,简化了函数定义. 箭头函数有两种写法,当函数体是单条语句的时候可以省略{}和return. 另一种是包含多条语句,不可以省略{}和return. 特点 箭头函数最大的特点就是没 ...
- Read And Write
The process of argument(论据的过程) Making a claim.(申明观点) Pointing out the opposing idea.(指出相反观点) Support ...