#P2048. 【NOIP2015pj】求和

【NOIP2015pj】求和

Description

【问题述】

    一条狭长的纸带被均匀划分出了n个格子,格子编号从1n。每个格子上都染了一种颜色colori[1m]当中的一个整数表示),并且写了一个数字numberi

5

5

3

2

2

2

编号

1

2

3

4

5

6

 

    定义一种特殊的三元组:(x, y, z),其中xyz都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:

组要求满足以下两个条件:

1.  xyz是整数,x<y<zy-x=z-y

2.  colorx=colorz

    满足上述条件的三元组的分数规定为(x+z)*(numberx+numberz)。整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以10,007所得的余数即可。

 

【输式】

输入文名为 sum.in

第一行是用一个空格隔开的两个正整数nmn表纸带上格子的个数,m表纸带上颜色的种类数。

第二行有n用空格隔开的正整数,第i数字number表纸带上编号为i格子上面写的数字。

第三行有n用空格隔开的正整数,第i数字color表纸带上编号为i格子染的颜色。

 

【输出格式】

输出文名为 sum.out

共一所求数除 10,007 数。

 

【输入出样例 1

 

sum.in

sum.out

6

2

 

 

 

 

82

5

5

3

2

2

2

2

2

1

1

2

1

见选手录下的 sum/sum1.in sum/sum1.ans

 

 

【输出样 1 明】

纸带示。

所有(1, 3, 5), (4, 5, 6)

所以数为(1 + 5) (5 + 2) + (4 + 6) (2 + 2) = 42 + 40 = 82

 

【输出样 2

 

sum.in

sum.out

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

见选手录下的 sum/sum2.in sum/sum2.ans

 

【输出样 3

见选手录下的 sum/sum3.in sum/sum3.ans

 

【数据明】

对于第 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 colori m1numberi100000

 

Source

NOIP2016普及组