同T2一样外校蒟蒻可能没看过:

题目描述:

题目背景

@桶哥

桶哥的桶没有送完。

题目描述

桶哥的桶没有送完,他还有n个桶。他决定把这些桶吃掉。他的每一个桶两个属性:种类aia_iai​和美味值bib_ibi​。若下标为x, y, z(下标从1开始)的三个桶满足:

x<z x < z x<z 且 x+y=z−2y x + y = z - 2y x+y=z−2y 且 ax=az a_x = a_z ax​=az​

那么它们构成一个套餐,会产生

(x+z)∗(bx−bz) (x + z) * (b_x - b_z) (x+z)∗(bx​−bz​)

的价值。问:一共会产生多少价值?

上面那个看不清楚的下标是z

输入输出格式

输入格式:

第一行两个整数n,mn,mn,m,表示共有m种共n个桶。

第二行n个整数表示bib_ibi​,

第三行n个整数表示aia_iai​,(下标)

输出格式:

一行一个整数,表示一共会产生多少价值。由于这个数可能很大,你只需要输出它除以10007的余数。

如果答案是负的,请将其加上10007再对10007取余。如-1应输出10006.


正解开始:

然而_rqy大佬讲的我并没怎么听懂,所以也是一蒙一蒙的。

转换一下公式:

x+y=z-2y
z-x=3y
x,z种类相等

那么把求价值公式:

展开得:xbx+zbx-xbz-zbz(注意下标),

也就是说,这个东西和y半毛钱关系都没有!

理一下关系:

1,z>x

2.z-x为3的倍数

3.z和x为同一种类的桶

那么考虑思路:同余枚举

一个数%3无非是余1余2余3(余0)

那么从1,2,3开始,按下标网上枚举,分3种,分别对应3个不同外循环,而内循环就是网上枚举到最后一个下标,那么别看是双重循环,但是你把枚举次数加起来,是O(n)的。

直接快了好多QWQ

那么回归正题:

内层循环干什么?

当然是利用∑来求和了

安利核心公式:

(x+z)*(bx-bz)=∑x*bx+z*∑bx-bz*∑x-z*bz*∑1

为什么∑的地方不同呢???

因为我们要对z枚举(或者x也行),这样把上一层求和的就给保存下来继续用而不是再for循环求一遍

其实用双层循环而不是三重循环来求阶乘也是一个道理

因为z<x,也就是说对于每一个z,前面从0到z-3的x都满足,都要被加进∑内部

每次只加一个而不是又来一遍for循环。。。

这个比较清楚了吧。。。。。。

上代码了。。。QWQ

#include <algorithm>
#include <cctype>
#include <cstdio>
#include <cstring> int readInt() {//快读
int ans = , c, f = ;
while (!isdigit(c = getchar()))
if (c == '-') f *= -;
do ans = ans * + c - '';
while (isdigit(c = getchar()));
return ans * f;
} const int mod = ;//定义%数组 int b[], a[];
int S[], Sx[], Sbx[], Sxbx[];//s为∑ int main() {
int n = readInt(); /* m = */readInt();
for(int i = ; i <= n; i++) b[i] = readInt() % mod;
for(int i = ; i <= n; i++) a[i] = readInt();
int ans = ;
for (int cc = ; cc <= ; ++cc) {
// { cc, cc+3, cc+6 ... } 分一组
memset(S, , sizeof(S));
memset(Sx, , sizeof(Sx));
memset(Sbx, , sizeof(Sbx));
memset(Sxbx, , sizeof(Sxbx));
for(int i = cc; i <= n; i += ) {
ans = (ans + i % mod * Sbx[a[i]] % mod) % mod;
ans = (ans - b[i] * Sx[a[i]] % mod) % mod;
ans = (ans + Sxbx[a[i]]) % mod;
ans = (ans - S[a[i]] * b[i] % mod * (i % mod) % mod) % mod;
S[a[i]] = (S[a[i]] + ) % mod;
Sx[a[i]] = (Sx[a[i]] + i) % mod;
Sbx[a[i]] = (Sbx[a[i]] + b[i]) % mod;
Sxbx[a[i]] = (Sxbx[a[i]] + i % mod * b[i] % mod) % mod;
}
}
printf("%d", (ans + mod) % mod);
return ;
}

气喘吁吁的甩胳膊,,

%_rqy大佬,是他出的题和给我们讲的题!

校内题目T2695 桶哥的问题——吃桶的更多相关文章

  1. T2695 桶哥的问题——吃桶

    ~~~~~我~是~真的~忍不了~这个~取模~的~锅~了~~~~~ T2695 桶哥的问题——吃桶 前传 1.T2686 桶哥的问题——买桶 这题真的hin简单,真的 2.T2691 桶哥的问题——送桶 ...

  2. 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和

    求和=>[链接] 题目相较起_rqy出的要简单很多,来自noip普及组2015 化简这个式子:x+z=2y,故x与z mod 2同余,因此和桶哥的问题——吃桶一样的思路就可以做出来啦qwq: # ...

  3. 【洛谷T2695 桶哥的问题——吃桶】

    这是我们团队的一个题目(就是一个_rqy说很好写的题QwQ) 题目背景 @桶哥 这个题目的思路很玄学(性感_rqy在线讲解) 60 Pts 对于前面的六十分,好像很好拿,单纯的打一个模拟 唯一需要注意 ...

  4. T2695 桶哥的问题——吃桶 题解

    校内测试 ------T3 对于这个题,首先想到的应该就是暴力枚举了吧,看看数据范围,60就是白送的啦!(但是我也不知道怎么才20分qwq) 思路分析: 这个题要你求所有套餐的总价值,先看一眼产生套餐 ...

  5. 校内题目T2691 桶哥的问题——送桶

    这是一道校内题目,但迷路的蒟蒻们同样被欢迎来此学习QWQ 题目描述: 题目背景 @桶哥本校——皎月pks大佬OrzOrz 买完了桶,桶哥要去送桶. 题目描述 桶哥买了nn个桶, 他要将这些桶送去nn个 ...

  6. T2695 桶哥的问题——送桶 题解

    校内测试 ------T2 看完这个题,就觉得和贪心那一块的任务调度很像,于是思路就是贪心啦! 蒟蒻的我,也就只能想到用贪心了,但是不知道怎么用qwq 这是我考试当时的思路,数据水骗了80分qwq: ...

  7. 洛谷 T2691 桶哥的问题——送桶

    嗯... 题目链接:https://www.luogu.org/problem/T2691 这道题有一点贪心的思想吧...并且思路与题目是倒着来的(貌似这种思路已经很常见的... 先举个栗子: 引出思 ...

  8. T2691 桶哥的问题——送桶

    这个题其实不难,就是按照结束时候的顺序从大到小走一遍,能送的就送,如果区间不重合就更新一下 代码: #include<iostream> #include<cstdio> #i ...

  9. 【校内test】桶哥的问题

    (以上题目出自_rqy两年前) #A:桶哥的问题——买桶[链接] [题目描述] 桶哥要买一些全家桶.他有a元钱,而每个桶要花b元钱.他能不能买到c个桶? [输入格式] 一行三个整数a, b, c [输 ...

随机推荐

  1. 【转】微信接口$GLOBALS['HTTP_RAW_POST_DATA']接收不到值

    $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 打印$xml出来,结果是null 使用的是php7,原因是php7已移除这个全局变量,改成 $xml = file_get ...

  2. Kotlin之注释

    kotliin中注释和java注释是一样的,支持单行注释和多行注释,但kotlin支持嵌套,java不支持

  3. Kettle使用教程之Job使用

    1.Kettle的Job使用十分简单,这里也只是演示比较简单的操作,创建Job 2.点击转换,然后点击浏览,选择转换对象 3.执行按钮,运行该转换 4.如果需要长期的进行定时转换,可以在Job中的st ...

  4. nodejs之express中间件路由使用

    1.express 中间件使用 /* * 中间件:就是匹配路由之前和匹配路由之后做的一系列操作 */ var express = require('express'); var app = new e ...

  5. Java学习之==>泛型

    一.什么是泛型 泛型,即“参数化类型”,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型.也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类.接口 ...

  6. dcef3 基本使用经验总结

    dcef3 基本使用经验总结 https://www.cnblogs.com/h2285409/p/10517483.html 加载命令启动参数    --enable-system-flash 会加 ...

  7. js移动端滑动效果

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  8. Cocos2d-X多线程(1) 在cocos2d-x中使用多线程

    教科书上说:进程是资源分配的最小单位,线程是CPU调度的最小单位. 进程是程序在计算机上的一次执行活动.直观的讲就是会产生一个pid. int main() {     //业务逻辑代码     re ...

  9. DN值

    DN值(Digital Number )是遥感影像像元亮度值,记录的地物的灰度值.无单位,是一个整数值,值大小与传感器的辐射分辨率.地物发射率.大气透过率和散射率等有关. 从DN值计算大气顶的反射率使 ...

  10. 【神经网络与深度学习】学习笔记:AlexNet&Imagenet学习笔记

    学习笔记:AlexNet&Imagenet学习笔记 ImageNet(http://www.image-net.org)是李菲菲组的图像库,和WordNet 可以结合使用 (毕业于Caltec ...