题目链接

T1

维护一个单调栈

#include <iostream>
#include <cstdio>
#define N 500000
#define rep(a,b,c) for(int a=b;a<=c;++a)
#define Rep(a,b,c) for(int a=b;a>=c;--a)
using namespace std;
typedef long long LL;
int n,top,stack[N],num[N];
LL ans,h[N],a[N],R[N];
int main()
{
cin>>n;
rep(i,,n)
{
cin>>h[i]>>a[i],num[i]=i;
for(;h[stack[top]]<h[i]&&top;top--)
{
R[i]+=a[num[stack[top]]];
ans=max(ans,R[i]);
}
stack[++top]=i;
}
top=;
Rep(i,n,)
{
for(;h[stack[top]]<h[i]&&top;top--)
{
R[i]+=a[num[stack[top]]];
ans=max(ans,R[i]);
}
stack[++top]=i;
}
cout<<ans<<endl;
return ;
}

T2

二分

二分矩形的边长,然后我们再试着枚举左边界,通过左边界我们就可以知道右边界,同样通过右边界我们也可以知道左边界,然后我们再在通过左右边界来判断里面的糖果数是否足够,当然我们的上下也是有边界的,我们在当前左右所加的这个矩形里,如果糖果数不够c那么直接返回false,反之,我们在来判断一下在这个区间里每个糖果的y坐标排序,然后将这个糖果的y与他的前c个糖果的y比较,如果小于等于mid的话,说明在这样的长度里我们可以找到c个糖果。

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
struct node {int x,y;} a[];
int C,n,L,R,mid,b[],o,i;
int cmp(node i,node j) {return i.x<j.x;}
int CMP(int i,int j) {return i<j;}
bool WORK(int l,int r)
{
if (r-l+<C) return false; o=;
for (int i=l; i<=r; i++) b[++o]=a[i].y;
sort(b+,b+o+,CMP);
for (int i=C; i<=o; i++)
if (b[i]-b[i-C+]<=mid) return true;
return false;
}
bool OK(int x)
{
int l=;
for (int i=; i<=n; i++)
{
if (a[i].x-a[l].x>x)
{
if (WORK(l,i-)) return true;
while (a[i].x-a[l].x>x) l++;
}
}
if (WORK(l,n)) return true;
return false;
}
int main()
{
freopen("square.in","r",stdin);
freopen("square.out","w",stdout);
scanf("%d%d",&C,&n);
for (i=; i<=n; i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+,a+n+,cmp);
L=; R=; mid=(L+R)/;
while (L<=R)
{
if (OK(mid)) {R=mid-; mid=(L+R)/;} else
{
L=mid+;
mid=(L+R)/;
}
}
cout<<L+;
return ;
}

T3

解析几何

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm> using namespace std;
const long double INF=(long double)*;
long double L,R,mid,ans,hh[];
int r,rr,i,n,MAX,X,Y,cnt,vv[],vv2[];
struct node2 {int t; long double l;} s[],S[];
struct node {int t,v;} t[];
int cmp(node i,node j) {return i.v<j.v || i.v==j.v && i.t>j.t;}
struct Node {long double x;int y,z;} p[];
int CMP(Node i,Node j) {return i.x<j.x;}
long double work(int x,long double y) {return (long double)t[x].v*y-hh[x];}
int main()
{
freopen("chase.in","r",stdin);
freopen("chase.out","w",stdout);
while ()
{
scanf("%d",&n);
// if (n==0) return 0;
MAX=;
for (i=; i<=n; i++)
{
scanf("%d%d",&t[i].t,&t[i].v);
MAX=max(MAX,t[i].t);
}
sort(t+,t+n+,cmp); int MIN=t[n].t;
for (i=n-; i>=; i--)
{
if (t[i].t>MIN) vv[i]=; else
MIN=t[i].t,vv[i]=;
}
for (i=; i<=n; i++) hh[i]=(long double)t[i].t*t[i].v;
r=; s[].l=MAX; s[].t=; s[].l=INF; vv[n]=;
for (i=; i<=n; i++)
if (!vv[i])
{
while (r && work(i,s[r].l)>=work(s[r].t,s[r].l)) r--;
if (!r) {r=; s[].l=MAX; s[].t=i; continue;}
L=s[r].l; R=s[r+].l; mid=(L+R)/2.0;
for (int I=; I<=; I++)
{
if (work(i,mid)>=work(s[r].t,mid)) {R=mid; mid=(L+R)/2.0;} else {L=mid; mid=(L+R)/2.0;}
}
s[++r].l=mid; s[r].t=i; s[r+].l=INF;
}
rr=; S[].l=MAX; S[].l=INF; S[].t=n;
MIN=t[].t;
for (i=; i<n; i++)
if (t[i].t<MIN) vv2[i]=; else
MIN=t[i].t,vv2[i]=;
for (i=n-; i>=; i--)
if (!vv2[i])
{
while (rr && work(i,S[rr].l)<=work(S[rr].t,S[rr].l)) rr--;
if (!rr) {rr=; S[].l=MAX; S[].t=i; continue;}
L=S[rr].l; R=S[rr+].l; mid=(L+R)/2.0;
for (int I=; I<=; I++)
{
if (work(i,mid)<=work(S[rr].t,mid)) {R=mid; mid=(L+R)/2.0;} else {L=mid; mid=(L+R)/2.0;}
}
S[++rr].l=mid; S[rr].t=i; S[rr+].l=INF;
}
cnt=;
for (i=; i<=r; i++) {p[++cnt].x=s[i].l; p[cnt].y=; p[cnt].z=s[i].t;}
for (i=; i<=rr; i++) {p[++cnt].x=S[i].l; p[cnt].y=; p[cnt].z=S[i].t;}
sort(p+,p+cnt+,CMP); X=Y=; ans=INF;
for (i=; i<=cnt; i++)
{
if (p[i].y==) X=p[i].z; else Y=p[i].z;
// printf("%.5f\n",(double)p[i].x);
if (X && Y) ans=min(ans,work(X,p[i].x)-work(Y,p[i].x));
}
printf("%.2f\n",fabs((double)ans));
return ;
}
}

2017.10.4 QBXT 模拟赛的更多相关文章

  1. 2017.10.7 QBXT 模拟赛

    题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...

  2. 2017.10.3 QBXT 模拟赛

    题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...

  3. 2017.10.6 QBXT 模拟赛

    题目链接 T1 Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO #include <algorithm> #include <ccty ...

  4. 2017.10.5 QBXT 模拟赛

    题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...

  5. 2017.10.2 QBXT 模拟赛

    题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...

  6. 2017.10.1 QBXT 模拟赛

    题目链接 T1 枚举右端点,前缀和优化.对于当前点x,答案为 sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1]) 整理为 sum[x][r]-sum[z][r] ...

  7. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  8. 2017.10.28 QB模拟赛 —— 下午

    题目链接 T1 按x值排序 遇到第二种牌插入 遇到第一种牌 查询<=y 的最小值 删除他 splay multiset cys大佬说 multiset就是不去重的set, #include &l ...

  9. 2017.10.28 QB模拟赛 —— 上午

    题目链接 T1 1e18 内的立方数有 1e6个 直接枚举可过 二分最优 考场用set  死慢.. #include <cstdio> int t; long long p; int ma ...

随机推荐

  1. HDU 4625. JZPTREE

    题目简述:给定$n \leq 50000$个节点的数,每条边的长度为$1$,对每个节点$u$,求 $$ E_u = \sum_{v=1}^n (d(u, v))^k, $$ 其中$d(u, v)$是节 ...

  2. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

  3. ubuntu 下交叉编译环境的搭建

    1. 安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下(如果已经安装好的话,就可以免去这一步了): #sudo apt-get install gcc g++ libgcc1 ...

  4. 在多台手机上批量安装apk

    1.手机要打开adb调试 2.该程序可以实现台android手机的多个apk批量安装 1.getSeriaoNum.py模块,该模块获取已连接手机的序列号 import os import threa ...

  5. JAVA学习笔记——(一)

    今日内容介绍 1.Java开发环境搭建 2.HelloWorld案例 3.注释.关键字.标识符 4.数据(数据类型.常量) 01java语言概述 * A: java语言概述 * a: Java是sun ...

  6. [Makefile] Makefile 及其工作原理

    转自:https://www.linuxidc.com/Linux/2018-09/154071.htm 当你需要在一些源文件改变后运行或更新一个任务时,通常会用到 make 工具.make 工具需要 ...

  7. Android开发中,那些让你觉得相见恨晚的方法、类或接口

    Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[],而在StackTraceElement类中有四个方 ...

  8. 【转】mysql数据库的数据类型

    一.数值类型            Mysql支持所有标准SQL中的数值类型,其中包括:                严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC ...

  9. null, undefined 和布尔值

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.n ...

  10. JS Guid生成

    function numToGuid(uid) { var str = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"; var l = uid.to ...