T2695 桶哥的问题——吃桶
~~~~~我~是~真的~忍不了~这个~取模~的~锅~了~~~~~
T2695 桶哥的问题——吃桶
前传
这题真的hin简单,真的
前言
这是一道看上去不是毒瘤但实际上有那么一seisei毒瘤的题目
在我多次提交代码仍然屡教不改最后痛改前非的惨痛经历下,总结出以下#¥@¥#%:
1.可以用结构体存 a , b QAQ实锤啦是取模的锅
不用结构体的话那就换成两个一维数组 a[ ] b[ ]
2.多取模,越多越好,能往哪里mod就往哪里mod
(一开始mod少了,然后就Wa了)

解析
1.
把这个式子化简一下
z - x = 3 y
也就是说明 z,x 属于同一个mod(3)的剩余类
如果 z 是 15 的话,那么 x 可以是 3 6 9 12 (%3……0)
如果 z 是 16 的话,那么 x 可以是 1 4 7 10 (%3…… 1)
如果 z 是 17 的话,那么 x 可以是 2 5 8 11 (%3…… 2)
所以我们就可以枚举 z ,那么符合条件的 x 就是和它同属一个剩余类并且
的啦
2.
我们把这个式子拆一下
( x + z )·( bx - bz )
= x·bx + z·bx - x·bz - z·bz
所以说,对于每一个 z ,它可以有很多个对应的 x ,虽然 x ,bx 不确定,但是 z , bz 是确定的
也就是说对于每一个 z 都可以得到以下这个式子
∑( x·bx ) + z·∑bx - bz·∑x - z·bz·(z的个数)
从前往后枚举 z ,对于每一个 z ,可以满足这个 z 要求的 x 一定也可以满足下一个和这个 z 相类似的 z ,所以说我们就开数组统计一下
S[ ] 到当前为止的满足 z 的 x 的数目
Sx[ ] 到当前为止的满足 z 的 x 的和
Sbx[ ] 到当前为止的满足 z 的 bx 的和
Sxbx[ ] 到当前为止的满足 z 的 x*bx 的和
每次先统计,再更新数组
对于代码当中呢,是枚举三种剩余类,也就是 
每次操作之前都要初始化一下
然后开始 for 循环枚举 z ,计算 
然后更新数组,按照 a 的种类更新到数组中的不同地方,数组中每一个小格子代表一个种类的桶
注意保证答案不为负数 貌似取模就已经保证了
最后输出答案即可
代码

#include<bits/stdc++.h> using namespace std; const int maxn=;
const int mod=; int n,m;
long long ans;
int S[maxn],Sx[maxn],Sbx[maxn],Sxbx[maxn]; struct RQY
{
int a,b;
}tong[maxn]; void caozuo(int rqy)
{
long long hxbx,hzbx,hxbz,hzbz;
int num=;
memset(S,,sizeof(S));
memset(Sx,,sizeof(Sx));
memset(Sbx,,sizeof(Sbx));
memset(Sxbx,,sizeof(Sxbx)); for(int i=rqy;i<=n;i+=)
{
num=tong[i].a ; hxbx=Sxbx[num]%mod;
hzbx=i%mod*Sbx[num]%mod;
hxbz=tong[i].b%mod *Sx[num]%mod;
hzbz=i%mod*tong[i].b %mod *S[num]%mod; ans=(ans+hxbx+hzbx-hxbz-hzbz)%mod; S[num]++;
Sx[num]=(Sx[num]+i%mod)%mod;
Sbx[num]=(Sbx[num]+tong[i].b%mod)%mod ;
Sxbx[num]=(Sxbx[num]+i%mod*tong[i].b%mod)%mod ; } } int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&tong[i].b );
for(int i=;i<=n;i++)
scanf("%d",&tong[i].a ); caozuo();
caozuo();
caozuo(); while(ans<)
{
ans+=mod;
} printf("%ld",ans%mod); return ;
}
题目链接
P2671 求和 
AC的关键 疯狂mod
这个题要注意是枚举2的剩余类啦
~~~~~~QWQ写完之后我发现我要好好组织语言 mod一mod ~~~~~~
T2695 桶哥的问题——吃桶的更多相关文章
- 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和
求和=>[链接] 题目相较起_rqy出的要简单很多,来自noip普及组2015 化简这个式子:x+z=2y,故x与z mod 2同余,因此和桶哥的问题——吃桶一样的思路就可以做出来啦qwq: # ...
- 校内题目T2695 桶哥的问题——吃桶
同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai和美味值bib ...
- 【洛谷T2695 桶哥的问题——吃桶】
这是我们团队的一个题目(就是一个_rqy说很好写的题QwQ) 题目背景 @桶哥 这个题目的思路很玄学(性感_rqy在线讲解) 60 Pts 对于前面的六十分,好像很好拿,单纯的打一个模拟 唯一需要注意 ...
- T2695 桶哥的问题——吃桶 题解
校内测试 ------T3 对于这个题,首先想到的应该就是暴力枚举了吧,看看数据范围,60就是白送的啦!(但是我也不知道怎么才20分qwq) 思路分析: 这个题要你求所有套餐的总价值,先看一眼产生套餐 ...
- 校内题目T2691 桶哥的问题——送桶
这是一道校内题目,但迷路的蒟蒻们同样被欢迎来此学习QWQ 题目描述: 题目背景 @桶哥本校——皎月pks大佬OrzOrz 买完了桶,桶哥要去送桶. 题目描述 桶哥买了nn个桶, 他要将这些桶送去nn个 ...
- T2695 桶哥的问题——送桶 题解
校内测试 ------T2 看完这个题,就觉得和贪心那一块的任务调度很像,于是思路就是贪心啦! 蒟蒻的我,也就只能想到用贪心了,但是不知道怎么用qwq 这是我考试当时的思路,数据水骗了80分qwq: ...
- T2691 桶哥的问题——送桶
这个题其实不难,就是按照结束时候的顺序从大到小走一遍,能送的就送,如果区间不重合就更新一下 代码: #include<iostream> #include<cstdio> #i ...
- 洛谷 T2691 桶哥的问题——送桶
嗯... 题目链接:https://www.luogu.org/problem/T2691 这道题有一点贪心的思想吧...并且思路与题目是倒着来的(貌似这种思路已经很常见的... 先举个栗子: 引出思 ...
- 【校内test】桶哥的问题
(以上题目出自_rqy两年前) #A:桶哥的问题——买桶[链接] [题目描述] 桶哥要买一些全家桶.他有a元钱,而每个桶要花b元钱.他能不能买到c个桶? [输入格式] 一行三个整数a, b, c [输 ...
随机推荐
- Zabbix 3.2.6使用注意事项
1.如果需要使用zabbix自带的SMTP发送邮件,需要在安装前升级系统的curl到7.20版本以上 2.zabbix对接PHP 7.1版本,因为PHP 7.1类型强化,会在安装完成zabbix,登录 ...
- dedecms 缩略图路径修改
- python根据已有数据库生成model.py
有时我们需要根据已存在的数据库进行django开发时,手写model.py是不现实的 先执行下面的语句,在命令行终端会输出所有表的类 python .\manage.py inspectdb 检查无误 ...
- Delphi 参数的传递
- deep_learning_Function_tensorflow_transpose()
tf.transpose()的用法 一.tensorflow官方文档内容 transpose( a, perm=None, name='transpose' ) Defined ...
- windows删除已注册服务
背景:近日,想要学习mysql主从复制,于是想在本地用多个mysql实例进行试验,试验的过程中总是挫折不断,生手不易,安装了很多实例,测试完成之后,想要删除这些实例. 虽然任务管理器可以停止任务,但是 ...
- Summer training round2 #1
A:水 B:求两个三角形之间的位置关系:相交 相离 内含 ①用三个点是否在三角形内外判断 计算MA*MB.MB*MC.MC*MA的大小 若这三个值同号,那么在三角形的内部,异号在外部 #incl ...
- windows下双击可运行的Java软件打包方案(转)
出处: http://www.cnblogs.com/shiyangxt/ 刚开始学Java的时候,挺郁闷的,写出来的java类文件,需要dos下编译,然后再dos下运行看效果.这使初学者常常 觉得麻 ...
- svn提交报错 解决方法
1.先clean 2.删除 .lock文件 3.update项目 4.先还原文件,然后update 接着commit
- java 学习笔记(四) java连接ZooKeeper
public class Demo2 { public static void main(String[] args) { String connectString = "192.168.1 ...