P2345 [USACO04OPEN] MooFest G
简单的一个分块处理:优雅的暴力枚举
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e4 + 7;
int st[N];
struct Block {
int l, r;
ll sum, m;
} block[151];
struct Node {
ll v, x;
} a[N];
bool cmp ( Node x, Node y ) {
if(x.v == y.v) return x.x < y.x;
return x.v < y.v;
}
void build ( ll n ) {
ll p = sqrt ( n );
ll t = n/p;
if( p * t < n ) t ++;
for( int i = 1;i <= t;i ++ ) {
block[i].l = ( i - 1 ) * p;
block[i].r = i * p;
block[i].m = block[i].sum = 0;
}
block[t].r = n;
}
ll find ( int q, ll n ) {
ll ans = 0, sum = 0, m = 0;
ll t = sqrt ( n );
ll k = n / t;
if(k * t < n) k ++;
t = a[q].x / t + (a[q].x % t != 0); int p = 0;
for( p = 1;p < t;p ++ )
m += block[p].m, sum += block[p].sum;
for( int j = block[t].l + 1;j < a[q].x;j ++ )
if(st[j])
m ++, sum += j;
ans += a[q].v * ( m * a[q].x - sum );
st[a[q].x] = 1;
block[p].m ++, block[p].sum += a[q].x;
m = sum = 0;
for( int j = a[q].x + 1; j <= block[p].r;j ++ )
if(st[j])
m ++, sum += j;
for( p += 1; p <= k; p ++ )
m += block[p].m, sum += block[p].sum;
ans += a[q].v * ( sum - m * a[q].x );
return ans;
}
int main() {
int n;
ll ans = 0;
scanf ( "%d", &n );
ll maxx = 0;
for(int i = 1;i <= n;i ++) {
scanf ( "%lld%lld", &a[i].v, &a[i].x );
maxx = max ( maxx, a[i].x );
}
build ( maxx );
sort ( a + 1, a + n + 1, cmp );
for( int i = 1;i <= n;i ++ )
ans += find ( i, maxx );
printf ( "%lld", ans );
return 0;
}
P2345 [USACO04OPEN] MooFest G的更多相关文章
- luoguP5094 [USACO04OPEN]MooFest 狂欢节
get 到的 这种需要求 含 max 的式子,枚举最大值的方法非常普遍. 类似的,还有含 min , gcd 的式子,枚举他们也很普遍 主要难点 我们首先想到,先按 v 从小到大排序,因为这样既可以简 ...
- Storyboards Tutorial 03
这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...
- 文件图标SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...
- 洛谷 P2345 奶牛集会 解题报告
P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...
- [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...
- CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update.... yum install 或者 添加y ...
- Linux deepin 下sublimes配置g++ openGL
参考 :http://blog.csdn.net/u010129448/article/details/47754623 ubuntu 下gnome只要将代码中deepin-terminal改为gno ...
- [翻译svg教程]svg 中的g元素
svg 中的<g>元素用来组织svg元素.如果一组svg元素被g元素包裹了,你可以通过对g元素进行变换(transform),被g元素包裹的元素也将被变换,就好这些被svg包裹的元素是一个 ...
- 软件工程:黄金G点小游戏1.0
我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...
- 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I
题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/G 这是一个01背包的模板题 AC代码: #include<stdio.h&g ...
随机推荐
- PI ID关联IR配置问题
例如问题:无数据 1.软件组织生成的id与ID配置id不一致(由于删除软件组织重新创建) 1.1找到需要修改位置 1.2 IR查询id 1.3 替换指定需要插入'-'
- 2022-3-11内部群每日三题-清辉PMP
1.供应商通知项目经理可能延迟交付一个模块.项目经理应该怎么做? A.立即通知相关方. B.通过增加额外的天数来修改项目管理计划,并记录它们对项目时间的影响. C.审查风险管理计划以评估风险,然后通知 ...
- 7.golang语言学习,标识符的命名规范
1.凡是自己可以命名的都是标识符 2.命名规则 a.由26个英文字母,数字0-9,_组成 b.不能数字开头 c.严格区分大小写 d.不能包含空格 e.下划线"_"本身在go中是一个 ...
- 寻找进程ID
- flutter List使用
_tabbarTitile.map((e){ return Tab( text: e, ); }).toList(),
- 快学起来!python入门自学必看
记得刚开始学python的时候,各种买书各种找资料,最后发现资料找了一大堆,但都是东一块西一块,内容不全且不系统,无意间发现这个宝藏网站,真的是太全了,当作工具书,时不时的翻翻,总会发现一些惊喜.0基 ...
- Flutter 新建项目
一.打开VSCode,点击侧边栏扩展按钮,搜索flutter,安装Flutter和Dart 二.按command+shift+P,输入flutter,选择Flutter:New project,新建项 ...
- mysql允许root用户在任何地方进行远程登录,并具有所有库任何操作权限
在本机先使用root用户登录mysql: mysql -u root -p"youpass" 进行授权操作: mysql>GRANT ALL PRIVILEGES ON *. ...
- flask create_time update_time is_delete
create_time = db.Column(db.DateTime, server_default=func.now()) update_time = db.Column(db.DateTime, ...
- Ubuntu22.04 KubeSphere 安装K8S集群
Ubuntu22.04 KubeSphere 安装K8S集群_Ri0n的博客-CSDN博客 一.系统环境系统:Ubuntu 22.04集群IP分布hostname 角色 IP地址master mast ...