COCI2017-2018-2 San
题意
有\(n \leq 40\)个节点,每个节点有权值\(H \leq 1e9\)和贡献\(v \leq 1e9\),从任意一个点可以向右跳到一个权值不小于它的节点,并获得该点贡献
可以从任意一个点开始,任意一个点结束
看数据范围可知此题是典型的折半搜索
方法:离散化高度后将数据分为左右两部分,分别DFS出两边的合法状态,然后排序考虑合并
左半部从大到小排序,右半部从小到大排序,统计右半部的各种高度前缀和
双指针从左往右扫,统计合法的方案数
#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
#include"map"
using namespace std;
const int MAXN=45;
int n,np,mid,o[MAXN];
long long c,ans;
int H[MAXN],v[MAXN],cnt[2];
int lis[MAXN];
map<int,int> p;
struct rpg{
long long v;
int h;
}a[2][1<<20];
void dfs1(long long val,int h,int tp)
{
a[0][++cnt[0]]=(rpg){val,h};
if(tp==mid) return;
for(int i=tp+1;i<=mid;++i) if(H[i]>=h) dfs1(val+v[i],H[i],i);
return;
}
void dfs2(long long val,int lh,int h,int tp)
{
a[1][++cnt[1]]=(rpg){val,lh};
if(tp==n) return;
for(int i=tp+1;i<=n;++i) if(H[i]>=h) dfs2(val+v[i],lh?lh:H[i],H[i],i);
return;
}
bool cmp1(rpg a,rpg b){return a.v>b.v;}
bool cmp2(rpg a,rpg b){return a.v<b.v;}
int main()
{
scanf("%d%lld",&n,&c);
for(int i=1;i<=n;++i) scanf("%d%d",&H[i],&v[i]),o[i]=H[i];
sort(o+1,o+n+1);for(int i=1;i<=n;++i) p[o[i]]=p[o[i-1]]+(o[i]>o[i-1]);
for(int i=1;i<=n;++i) H[i]=p[H[i]];
mid=1+n>>1;dfs1(0,0,0);dfs2(0,0,0,mid);
sort(a[0]+1,a[0]+cnt[0]+1,cmp1);
sort(a[1]+1,a[1]+cnt[1]+1,cmp2);
a[1][1].h=41;for(int i=1;i<=cnt[1];++i) ++lis[a[1][i].h];
int ct1=1,ct2=1;
while(ct1<cnt[0]){
while(ct2<=cnt[1]&&a[1][ct2].v+a[0][ct1].v<c) --lis[a[1][ct2].h],++ct2;
ans+=cnt[1]-ct2+1;
for(int i=0;i<=n;++i) if(H[i]<a[0][ct1].h) ans-=lis[H[i]];
++ct1;
}printf("%lld\n",ans);
return 0;
}
COCI2017-2018-2 San的更多相关文章
- COCI2017/2018 CONTEST #7
Prosjek 显然,越大的数应该越后参与平均数的计算,这样受较小数的影响就小一些 那我们就排个序,贪心的从最小的数开始往大的计算平均数即可 时间复杂度\(O(nlogn)\) Timovi 把分组分 ...
- San(COCI2017.2)题解
题意 一个人为了楼顶的金币要去跳楼,但是不能往更矮的楼上跳. 求在一个长为N的序列中总点权值和大于等于K的不下降序列数. N<=40,K<=4e10 官方题解 折半搜索的经典例子!N在20 ...
- Gartner 2018 数据库系列报告发布 巨杉数据库连续两年入选
近期,Gartner陆续发布了2018年的数据库系列报告,包括<数据库魔力象限><数据库核心能力>以及<数据库推荐报告>.其中,SequoiaDB巨杉数据库作为业界 ...
- Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来 来源 https://www.freebuf.com/articles/paper/184903.ht ...
- Mediocre String Problem (2018南京M,回文+LCP 3×3=9种做法 %%%千年好题 感谢"Grunt"大佬的细心讲解)
layout: post title: Mediocre String Problem (2018南京M,回文+LCP 3×3=9种做法 %%%千年好题 感谢"Grunt"大佬的细 ...
- NAS与SAN
1. NAS(Network Attached Storage,网络附加存储服务器) 简单地说,NAS就是一台File Server,只要将NAS连接上网络,那么在网络上面的其他主机就能够访问NAS上 ...
- Raid与DAN、SAN、NAS基础
一. 磁盘基本知识 1. Raid分类 Raid磁盘阵列是由多个磁盘组合成的磁盘组,可将数据分割成许多区段,分别存放在各个磁盘上:同时利用不同排列技术,可提高磁盘性能和数据安全性.下列简单介绍几种Ra ...
- 2018. The Debut Album
http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...
- Math.abs(~2018),掌握规律即可!
Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...
- HP SAN Switch參考文檔地址
HP SAN Switch其實也是基於Linux內核 http://h20566.www2.hpe.com/portal/site/hpsc/template.PAGE/public/psi/manu ...
随机推荐
- 30 个免费的 Sketch 必备插件
简评:中秋三天小长假,要不要学点啥?比如简单的设计?比如用 Sketch 做个项目? Sketch 有许多值得称赞的地方,其丰富的插件就是亮点之一.Sketch 的社区有着大量免费高效的插件.今天这篇 ...
- 寻找第K大的数(快速排序的应用)
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数.给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在.测试样例:[1,3,5,2,2],5, ...
- nginx负载均衡之入门配置
先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况.那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上 ...
- 编程开发之--java多线程学习总结(3)类锁
2.使用方法同步 package com.lfy.ThreadsSynchronize; /** * 1.使用同步方法 * 语法:即用 synchronized 关键字修饰方法(注意是在1个对象中用锁 ...
- Python基础部分的疑惑解析——运算符和数据类型(3)
补充上一篇: #! /user/bin/env python 代码内声明这一个就可以用1.py类似的文件直接执行,但是要在linux内加权限, 不需要在前面加python 1.py执行了.文件可以 ...
- pytest+jenkins安装+allure导出报告
环境安装: windows7+64位 pytest:4.0.2 allure的安装:allure的python库pytest-allure-adaptor jenkins的安装:2.138.2 JDK ...
- Codeforces Round #555 (Div. 3) E. Minimum Array 【数据结构 + 贪心】
一 题面 E. Minimum Array 二 分析 注意前提条件:$0 \le a_{i} \lt n$ 并且 $0 \le b_{i} \lt n$.那么,我们可以在$a_{i}$中任取一个数 ...
- 基于Anaconda 安装 geatpy 和 tensorflow
装了好久的第三方包终于成功了,暴风哭泣!!!总结一下 分两部分说: 一. 首先是在本地电脑windows系统下装: 首先安利一下这个包括各种 Genetic and Evolutionary Algo ...
- [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)
[FROM] http://www.idn100.com/zuzhuangdiannaopeizhi-pc2849/ 排名 处理器 图例 分数 1 Intel Xeon Platinum 8173M ...
- Mac 10.12安装专业抓包工具Wireshark
说明:专业到不太会用. 下载: (链接: https://pan.baidu.com/s/1c570YE 密码: pkmr)