博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P2345 奶牛集会 解题报告
阅读量:5247 次
发布时间:2019-06-14

本文共 1163 字,大约阅读时间需要 3 分钟。

P2345 奶牛集会

题目背景

MooFest, 2004 Open

题目描述

约翰的N 头奶牛每年都会参加“哞哞大会”。哞哞大会是奶牛界的盛事。集会上的活动很

多,比如堆干草,跨栅栏,摸牛仔的屁股等等。它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的。奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi − Xj | 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力。假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。

输入输出格式

输入格式:

• 第一行:单个整数N,1 ≤ N ≤ 20000

• 第二行到第N + 1 行:第i + 1 行有两个整数Vi 和Xi,1 ≤ Vi ≤ 20000; 1 ≤ Xi ≤ 20000

输出格式:

• 单个整数:表示所有奶牛产生的音量之和


对于这个题,要求的即为 \(\sum_{i=1}^n V_i*\sum_{V_j<V_i} |x_i-x_j|\)

对于音量\(V\),我们可以排序来做以消除影响。

但对于带绝对值的距离,就不太好处理了。

我们考虑去掉绝对值。

\(\sum_{i=1}^n V_i*(\sum_{V_j<V_i,x_i>x_j} (x_i-x_j)*\sum_{V_j<V_i,x_i<x_j} (x_j-x_i))\)
\(\Rightarrow \sum_{i=1}^n( V_i*(\sum_{ V_j<V_i,x_i<x_j }x_j )-V_i*(\sum_{ V_j<V_i,x_i>x_j }x_j )+x_i*(k_1-k_2) )\)(其中,\(k_1\)存储位置在\(x_i\)左边的点的个数,\(k_2\)右边)

我们使用两个树状数组\(c1\)\(c2\)分别维护\(1\)~\(n\)的坐标之和,和\(1\)~\(n\)的点的个数。其中\(1\)~\(n\)表示按位置离散化的值。

我们将\(v\)从小到大排序并将这个点加入树状数组即可。


code:

#include 
#include
#define ll long longusing namespace std;const ll N=20010;ll c1[N],c2[N];//奶牛个数,奶牛距离和ll n;struct node{ ll x,v,i; bool friend operator <(node n1,node n2) { return n1.x

2018.6.2

转载于:https://www.cnblogs.com/butterflydew/p/9126070.html

你可能感兴趣的文章
从“差不多了”到 正式发布 -- 新浪微博WinPhone UWP版诞生记
查看>>
ACM数论总结
查看>>
C#开源项目大全
查看>>
luogu1026 统计单词个数
查看>>
长按事件--UILongPressGestureRecognizer
查看>>
水波特效处理
查看>>
1301班 github安装及账户注册
查看>>
SQL自动事务、隐藏事务、显式事务,以及.net中的关于事务
查看>>
已知先序和中序遍历求后续遍历
查看>>
CF687C. The Values You Can Make[背包DP]
查看>>
洛谷CON1041 NOIP模拟赛一试
查看>>
Photoshop切图方法
查看>>
笨方法学python(本文为阅读时从此书摘录的笔记) 第五天
查看>>
VS2010 皮肤扩展
查看>>
java 获取pdf内容
查看>>
getResource()和getResourceAsStream()以及路径问题
查看>>
Java使用JNDI技术获取DataSource对象
查看>>
PHP做APP接口时,如何保证接口的安全性??????????
查看>>
RabbitMQ AMQP (高级消息队列协议)
查看>>
图(有向)-拓扑排序
查看>>