P2671 求和
题目描述
一条狭长的纸带被均匀划分出了 nn 个格子,格子编号从 11 到 nn 。每个格子上都染了一种颜色 color\_icolor_i 用 [1,m][1,m] 当中的一个整数表示),并且写了一个数字 number\_inumber_i 。

定义一种特殊的三元组: (x,y,z)(x,y,z) ,其中 x,y,zx,y,z 都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:
xyzxyz 是整数, x<y<z,y-x=z-yx<y<z,y−x=z−y
colorx=colorzcolorx=colorz
满足上述条件的三元组的分数规定为 (x+z) \times (number\_x+number\_z)(x+z)×(number_x+number_z) 。整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以 10,00710,007 所得的余数即可。
输入输出格式
输入格式:
第一行是用一个空格隔开的两个正整数 nn 和 m,nm,n 表纸带上格子的个数, mm 表纸带上颜色的种类数。
第二行有 nn 用空格隔开的正整数,第 ii 数字 numbernumber 表纸带上编号为 ii 格子上面写的数字。
第三行有 nn 用空格隔开的正整数,第 ii 数字 colorcolor 表纸带上编号为 ii 格子染的颜色。
输出格式:
一个整数,表示所求的纸带分数除以 1000710007 所得的余数。
输入输出样例
6 2
5 5 3 2 2 2
2 2 1 1 2 1
82
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
1388
说明
【输入输出样例 1 说明】
纸带如题目描述中的图所示。
所有满足条件的三元组为: (1, 3, 5), (4, 5, 6)(1,3,5),(4,5,6) 。
所以纸带的分数为 (1 + 5) \times (5 + 2) + (4 + 6) \times (2 + 2) = 42 + 40 = 82(1+5)×(5+2)+(4+6)×(2+2)=42+40=82 。
对于第 11 组至第 22 组数据, 1 ≤ n ≤ 100, 1 ≤ m ≤ 51≤n≤100,1≤m≤5 ;
对于第 33 组至第 44 组数据, 1 ≤ n ≤ 3000, 1 ≤ m ≤ 1001≤n≤3000,1≤m≤100 ;
对于第 55 组至第 66 组数据, 1 ≤ n ≤ 100000, 1 ≤ m ≤ 1000001≤n≤100000,1≤m≤100000 ,且不存在出现次数超过 2020 的颜色;
对 于 全 部 1010 组 数 据 , 1 ≤ n ≤ 100000, 1 ≤ m ≤ 100000, 1 ≤ color\_i ≤ m,1≤number\_i≤1000001≤n≤100000,1≤m≤100000,1≤color_i≤m,1≤number_i≤100000
Solution:
本题zyys的普及题目。
首先我们不难发现$2y=x+z$,所以$x,z$同奇或同偶,然后化简式子$(x+z)*(num_x+num_z)=x*num_x+x*num_z+z*num_z+z*num_x$。
于是我们可以分开处理各颜色的奇偶数,然后同一颜色的同奇偶性的就直接求前缀和,最后只需要$O(n)$扫一遍,求每个颜色的方案数,累加统计求和就好了。
代码:
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)>(b)?(b):(a))
using namespace std;
const int N=,mod=;
ll n,m,col[N][],num[N],sum[N][],c[N];
ll ans; il int gi(){
int a=;char x=getchar();bool f=;
while((x<''||x>'')&&x!='-')x=getchar();
if(x=='-')x=getchar(),f=;
while(x>=''&&x<='')a=(a<<)+(a<<)+x-,x=getchar();
return f?-a:a;
} int main(){
n=gi(),m=gi();
For(i,,n) num[i]=gi();
For(i,,n) {
c[i]=gi();
col[c[i]][i%]++;
sum[c[i]][i%]+=num[i];
}
For(i,,n)
if(col[c[i]][i%]->)
ans=(ans+i*num[i]*(col[c[i]][i%]-)%mod+i*(sum[c[i]][i%]-num[i])%mod)%mod;
cout<<ans;
return ;
}
P2671 求和的更多相关文章
- 洛谷 P2671 求和 解题报告
P2671 求和 题目描述 一条狭长的纸带被均匀划分出了\(n\)个格子,格子编号从\(1\)到\(n\) .每个格子上都染了一种颜色\(color_i\)用\([1,m]\)当中的一个整数表示),并 ...
- 洛谷P2671 求和 [数论]
题目传送门 求和 格式难调,题面就不放了. 分析: $ZYYS$的一道题. 很显然是大力推公式.我们分析一下题目,实际上限制条件就是:下标同奇偶且颜色相同的数,那么我们先拿这个公式$(x+z)*(nu ...
- 洛谷 P2671 求和
题目描述 一条狭长的纸带被均匀划分出了nn个格子,格子编号从11到nn.每个格子上都染了一种颜色color\_icolor_i用[1,m][1,m]当中的一个整数表示),并且写了一个数字number\ ...
- NOIP2015 普及组 洛谷P2671 求和 (数学)
一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...
- T2695 桶哥的问题——吃桶
~~~~~我~是~真的~忍不了~这个~取模~的~锅~了~~~~~ T2695 桶哥的问题——吃桶 前传 1.T2686 桶哥的问题——买桶 这题真的hin简单,真的 2.T2691 桶哥的问题——送桶 ...
- 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和
求和=>[链接] 题目相较起_rqy出的要简单很多,来自noip普及组2015 化简这个式子:x+z=2y,故x与z mod 2同余,因此和桶哥的问题——吃桶一样的思路就可以做出来啦qwq: # ...
- [P2671][NOIP2015]求和 (数论)
[题目链接] 这位大神讲得很详细:点我 本蒟蒻只会抄抄题解了 #include<bits/stdc++.h> #define max(a,b) (a>b?a:b) #define m ...
- Java程序:从命令行接收多个数字,求和并输出结果
一.设计思想:由于命令行接收的是字符串类型,因此应先将字符串类型转化为整型或其他字符型,然后利用for循环求和并输出结果 二.程序流程图: 三.源程序代码: //王荣荣 2016/9/23 ...
- Java之递归求和的两张方法
方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...
随机推荐
- intellij IEDA 从svn拉环境到正常运行
intellij IEDA 从svn拉环境到正常运行 1.svn拉项目 在项目选择界面点击Check out from Version Control 从中选择Subversion(SVN) 2.选 ...
- svg在html的使用
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <defs&g ...
- C#中给WebClient添加代理Proxy
效果图: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
- 【PHP】统计问卷调查结果的选项票数和百分比
遇到问题: 有以下数组,每一条记录是用户的每一条问卷题目的回答情况,q_id是问题id,o_id是选项id.需要统计每一个选项被选择的次数和每个选项占该问题的百分比.如问题1的选项有A和B,一个用户选 ...
- 20180803UnionPay银联支付
LNMP环境下开发的银联支付(测试环境) 1.准备条件 a.银联支持API:https://open.unionpay.com/ajweb/help/api b.选择开发软件包 图示: c.我选择: ...
- 终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )
终于搞定了cxgrid的多行表头 转自:http://mycreature.blog.163.com/blog/static/556317200772524226400/ 这一周都在处理dbg ...
- 04 mysql 基础三 (进阶)
mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; select * from student; select * from ...
- Linux中程序的编译和链接过程
1.从源码到可执行程序的步骤:预编译.编译.链接.strip 预编译:预编译器执行.譬如C中的宏定义就是由预编译器处理,注释等也是由预编译器处理的. 编译: 编译器来执行.把源码.c .S编程机器码. ...
- [Cracking the Coding Interview] 4.6 Successor 后继节点
Write an algorithm to find the 'next' node(i.e. in-order successor) of a given node in a binary sear ...
- jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
在使用validation进行唯一性验证时,想各个模块写一个统一的方法,相统一参数名称,但是remote方法会默认把对应的参数传过去 如: 会把role.roleName默认作为变量提交过去 所以想自 ...