2017.10.4 QBXT 模拟赛
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--)
{
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--)
{
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 模拟赛的更多相关文章
- 2017.10.7 QBXT 模拟赛
题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...
- 2017.10.3 QBXT 模拟赛
题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...
- 2017.10.6 QBXT 模拟赛
题目链接 T1 Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO #include <algorithm> #include <ccty ...
- 2017.10.5 QBXT 模拟赛
题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...
- 2017.10.2 QBXT 模拟赛
题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...
- 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] ...
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 2017.10.28 QB模拟赛 —— 下午
题目链接 T1 按x值排序 遇到第二种牌插入 遇到第一种牌 查询<=y 的最小值 删除他 splay multiset cys大佬说 multiset就是不去重的set, #include &l ...
- 2017.10.28 QB模拟赛 —— 上午
题目链接 T1 1e18 内的立方数有 1e6个 直接枚举可过 二分最优 考场用set 死慢.. #include <cstdio> int t; long long p; int ma ...
随机推荐
- Coding-Job:从研发到生产的容器化融合实践
大家好,我是来自 CODING 的全栈开发工程师,我有幸在 CODING 参与了 Coding-Job 这个容器化的编排平台的研发.大家对 CODING 可能比较了解, Coding.net 是一个一 ...
- SelectObject()函数详解
SelectObject 把一个对象(位图.画笔.画刷等)选入指定的设备描述表.新的对象代替同一类型的老对象. HGDIOBJ SelectObject( HDC hdc, // ...
- socket网络编程实践要点
1.创建udp的socket句柄 // 当host_port为0时,则表示让操作系统自动分配 bool createUdpSocket(string host_ip,unsigned short ho ...
- 再论c#获取存储过程返回值(包括SqlSugar)
其实这个问题好多年以前研究过: https://blog.csdn.net/xpnew/article/details/6909902 最近因为需要统计日结月结,给同事写了一套调用存储过程的代码.同时 ...
- Python之路(四十一):通过项目来深入理解tornado
Tornado之路 引子 与其感慨路难行,不如马上出发 目录 通过项目来深入理解tornado(一):tornado基础回顾 通过项目来深入理解tornado(二):AsyncHttpClient ...
- 剑指Offer的学习笔记(C#篇)-- 不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 一 . 理解题目 这个题目可以让我们回归到小学,想想加法的竖式是怎么写的,哈哈,如果当时你不是那个竖式写错了, ...
- P1308-道路修建 (noi 2011)
题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1 条双向道路. 每条道 ...
- mac 增加/usr/bin目录的操作无权限
起因:想要往/usr/bin目录下拷贝文件,提示: operation not permitted 解决办法: 1. 重启,启动中长安command+r进入恢复模式 2.顶部菜单拉中打开终端 3. 输 ...
- 七,JOBC数据库编程
七,JOBC数据库编程 七,JOBC数据库编程 一,java数据库编程步骤 1,将数据库驱动包考入lib目录: 2,加载驱动--整个操作数据库程序运行期间只需要加载一次 Class.forName(& ...
- MyBatis学习总结(一)
MyBatis,是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解 ...