[JZOJ4737] 【NOIP2016提高A组模拟8.25】金色丝线将瞬间一分为二
Description
Input
Output
Sample Input
5 10
1 1
2 2
3 3
4 4
5 5
Sample Output
4
Data Constraint
Hint
开long long 100分,不开10分也是醉了。
long long 卡90分的头一次见。
暴力: 直接O(N^2)不说了。
部分分:x, y坐标递增,设f[i]表示i号点对之前的贡献,那么f[i] = f[i-1] + (abs(x[i] - x[i-1])+ abs(y[i] - y[i-1])) * (i - 1),直接递推就行了。
x坐标相等的不会...
不是正解正确解法。考试的时候不知道怎么yy出来的。
我们把原序列称为p;
我们考虑,一个点i加进来的贡献, 一定是 $ \large \sum_{j=1}^{i-1} |x[i]-x[j]| + |y[i]-y[j]| $.
考虑去掉绝对值,我们先看x轴,y轴和x轴一样。
那么就是如果x[i] > x[j] 贡献 += x[i] - x[j], 否则 贡献 += x[j] - x[i];
受到这个启发(不知脑子里如何蹦出的想法),我们把原数组按照x排序,得到数组p。
然后数组p中的元素的x坐标一定是单调不降的。我们设原来的i在p中的位置为pos[i]。
那么对于j < pos[i] 的元素, 我们可以直接算 $ \large \sum_{ } x[i] - x[j] $。
化简一下得到 $ num * x[i] - \large \sum_{}x[j] $. num表示p数组中1~i中在i前面的数的个数。
所以我们可以用一个树状数组维护数是否出现, 即里面全是01序列。
用另一个树状数组维护$ \large \sum_{ }x[j] $,即扫描到j, 就把x[j]插入树状数组的pos[j]的位置。
对于j > pos[i]的同理。
对于y轴同理。
最后用四个树状数组搞定了这道题。
还有, 这份代码不吸氧气只有80分。
一定记得开long long否则只有10分(论一个人如何让自己的成绩缩小10倍).
复杂度O(NlogN*一个大常数)。
完了我感觉我讲不清了233.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#include <ctime>
using namespace std;
#define reg register
#define INT long long
#define int long long inline int read() {
int res=;char ch=getchar();bool flag=;
while(!isdigit(ch)){if(ch=='-')flag=;ch=getchar();}
while(isdigit(ch))res=(res<<)+(res<<)+(ch^),ch=getchar();
return flag?-res:res;
}
inline int abss(int x) {return x < ? -x : x;}
int n, D;
struct date {
int x, y, id;
}p[], px[], py[]; struct BIT {
INT tr[];
#define lowbit x & -x
inline void add(int x, int y)
{
while(x <= n) tr[x] += y, x += lowbit;
}
inline INT ask(int x)
{
INT res = ;
while(x) res += tr[x], x -= lowbit;
return res;
}
}x1, x2, y1, y2;//1:是否出现, 2:坐标
INT now; inline bool cmp1(date a, date b)
{
return a.x < b.x;
}
inline bool cmp2(date a, date b)
{
return a.y < b.y;
} int posx[], posy[]; signed main()
{
n = read(), D = read(); for (reg int i = ; i <= n ; i ++) px[i].x = py[i].x = read(), px[i].y = py[i].y = read(), px[i].id = py[i].id = i;
for (reg int i = ; i <= n ; i ++) p[i].x = px[i].x, p[i].y = px[i].y, p[i].id = i;
sort(px + , px + + n, cmp1), sort(py + , py + + n, cmp2);
for (reg int i = ; i <= n ; i ++) posx[px[i].id] = i;
for (reg int i = ; i <= n ; i ++) posy[py[i].id] = i;
for (reg int i = ; i <= n ; i ++)
{
now += x1.ask(posx[i]) * p[i].x - x2.ask(posx[i]);
now += y1.ask(posy[i]) * p[i].y - y2.ask(posy[i]);
now += (x2.ask(n) - x2.ask(posx[i])) - (x1.ask(n) - x1.ask(posx[i])) * p[i].x;
now += (y2.ask(n) - y2.ask(posy[i])) - (y1.ask(n) - y1.ask(posy[i])) * p[i].y;
x1.add(posx[i], ), x2.add(posx[i], p[i].x);
y1.add(posy[i], ), y2.add(posy[i], p[i].y);
if (now >= D) {printf("%d\n", i);return ;}
// printf("%lld\n", now);
}
puts("-1");
return ;
}
[JZOJ4737] 【NOIP2016提高A组模拟8.25】金色丝线将瞬间一分为二的更多相关文章
- JZOJ 4732. 【NOIP2016提高A组模拟8.23】函数
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms Memory Limits: 262144 KB Detailed ...
- 【NOIP2016提高A组模拟9.14】数列编辑器
题目 分析 比赛上,没有注意到询问只询问光标前面,于是只打了个暴力. 因为询问只询问光标前面,首先,当光标向后每移动到一个位置,顺便将这个位置的前缀和,和最大前缀和求出来. 总之,模拟 #includ ...
- 【NOIP2016提高A组模拟9.24】总结
第一题纯模拟,结果那个出题人脑子似乎进水了,空间限制开了1G!!! 导致我捉摸了半天为什么空间要开那么大,最后只能得出上面的结论. 第二题是个矩阵快速幂,比赛上我没把递推式求出来,但是根据各种乱搞,得 ...
- 【NOIP2016提高A组模拟9.15】Map
题目 分析 发现,当原图是一棵树的时候,那么新建一条边后,就会变成环套树, 而环内的所有点对都是安全点对,如果环中有k个点,答案就是\(k(k-1)\) 联想到,当把原图做一遍tarjan缩点,每个环 ...
- 【NOIP2016提高A组模拟8.17】(雅礼联考day1)Binary
题目 分析 首先每个数对\(2^i\)取模.也就是把每个数的第i位以后删去. 把它们放进树状数组里面. 那么当查询操作, 答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以 ...
- 【JZOJ4746】【NOIP2016提高A组模拟9.3】树塔狂想曲
题目描述 相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和.走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1).如下图是一个数塔,映射到该数塔上行 ...
- 【JZOJ4745】【NOIP2016提高A组模拟9.3】看电影
题目描述 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个 ...
- 【JZOJ4803】【NOIP2016提高A组模拟9.28】求导
题目描述 输入 输出 样例输入 2x^2+3x+1 样例输出 4x+3 数据范围 样例解释 求导的意思: 多项式是由若干个单项式构成的 单项式的一般形式是ax^b,其中ab都是常数,x是自变量 对于单 ...
- 【JZOJ4787】【NOIP2016提高A组模拟9.17】数格子
题目描述 输入 输出 样例输入 1 10000 3 10000 5 10000 0 0 样例输出 1 11 95 数据范围 每个测试点数据组数不超过10组 解法 状态压缩动态规划. 设f[i][j]表 ...
随机推荐
- rpyc + plumbum 实现远程调用执行shell脚本
rpyc可以很方便实现远程方法调用, 而plumbum则可以实现在python中类似shell的方式编码: 具体实现代码如下: Server.py import rpyc from rpyc.util ...
- Cookie的临时存储和定时存储
Cookie解决了不同请求的数据共享问题.是由服务器保存在客户端的小文本文件,包含了用户的信息,可以避免用户重复输入用户名和密码进行登录.浏览器请求Cookie,服务器响应时返回Cookie,浏览器存 ...
- 微信支付JSAPI支付
1.介绍 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打开某 ...
- Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)
前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...
- 使用 Nginx 部署前后端分离项目,解决跨域问题
前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...
- 自己制作一个简单的操作系统二[CherryOS]
自己制作一个简单的操作系统二[CherryOS] 我的上一篇博客 自己制作一个简单的操作系统一[环境搭建], 详细介绍了制作所需的前期准备工作 一. 一点说明 这个操作系统只是第一步, 仅仅是开机显示 ...
- 软件测试的分类&软件测试生命周期
软件测试的分类: 按测试执行阶段:单元测试.集成测试.系统测试.验收测试.(正式验收测试,Alpha 测试-内侧,Beta 测试-公测) 按测试技术分类:黑盒测试.白盒测试.灰盒测试 按测试对象是否运 ...
- Maven 梳理-手动创建Maven项目(非web),使用Maven编译、测试、打包、安装、引用
创建空目录 F:\jtDevelop\maventest\myapp 创建pom.xml文件 <project xmlns="http://maven.apache.org/POM/4 ...
- ViewModel 和 ViewModelProvider.Factory:ViewModel 的创建者
本文翻译自:https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel ...
- 深入理解什么是Java泛型?泛型怎么使用?【纯转】
本篇文章给大家带来的内容是介绍深入理解什么是Java泛型?泛型怎么使用?有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助. 一.什么是泛型 “泛型” 意味着编写的代码可以被不同类型的对象所 ...