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\) 米.由于同一栋房子里可以有 ...
随机推荐
- 【IDEA】测试类(test)的模板及定义
人和动物的区别是:能制造和使用工具.因为,工具大大便利了我们的生活. 我们在使用Idea开发java项目的过程中,有些代码是固定的,我们能不能只写几个字,就代表一连串的代码.例如,这里,我们只是输入了 ...
- ESP-Example ble-ancs解析
苹果通知中心服务(ANCS)的目的是让蓝牙配件(通过蓝牙低能耗链接连接到iOS设备)以简单方便的方式访问iOS设备上产生的各种通知. Apple通知中心服务是主服务,其UUID为7905F431-B5 ...
- docker 搭建mysql主从复制环境(一主两从)
一主多从配置 服务器规划:使用docker方式创建,主从服务器IP一致,端口号不一致 主服务器:容器名docker-mysql-master,端口3306 从服务器:容器名docker-mysql-s ...
- python菜鸟学习: 2.列表操作
# -*- coding: utf-8 -*-# 列表操作names = ["LiSi", "ZhangSan", "WangWu"]pri ...
- python机器学习——线性回归方法
背景与原理: 线性回归是机器学习建模中最为简单的模型,也是计算起来最为直观的模型 所谓线性回归,我们要建立的是这样的模型:对一组数据,每组数据形如$(x_{1},...,x_{n},y)$,我们希望构 ...
- ES6的Map和Set的了解和练习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue后台管理系统——订单管理模块
电商后台管理系统的功能--订单管理模块 1. 订单管理概述 订单管理模块用于维护商品的订单信息, 可以查看订单的商品信息.物流信息,并且可以根据实际的运营情况对订单做适当的调整. 2. 订单列表 在c ...
- tensorflow2.0和之前版本读取模型的接口变化
tensorflow2.0 c++加载模型可以用接口LoadSavedModel: SessionOptions opts; tensorflow::RunOptions run_option ...
- linux资源查看与监控命令
- PLC入门笔记9
梯形图电路之电机控制 电机直接启动控制电路 电机正反停控制电路 我的图.. 但愿最后说的不要发生吧 例如下错了程序 导致... 最好外部电路互锁一下.. 电机故障判断电路 我的图.. 电机故障转换电路 ...