NOIp2018集训test-9-4
老张让我们2.5h考NOI%你题,喵喵喵?
因为今(我)天(实)的(在)题(太)鬼(弱)畜(了)了,我还只改了t1。
Problem A. reorder
考试的时候大家都写了最长不降子序列,然后全员10分,就很开心。
考虑中间一段不降的序列不变,然后剩余的一部分往前放一部分往后方,答案就是n-这段序列的长度
调一下第2组数据,发现直接求最长不降子序列是错的,因为可能在最长不降子序列中间有一部分没有被选的数,权值是在最长不降子序列的最小值和最大值之间的。
所以正确的答案只能是这样的
中间一段不降序列,其余点都在这一段最高点上面或者最低点下面(可以共线)
排序之后双指针扫就好了
注意直接扫会漏掉的部分,红色的部分要通过二分求出
一开始我只二分了下面没有二分上面,但是题目数据是用脚造的,就过了,wys大佬告诉我之后,我随手造了一组数据就把之前的代码×了
9
1 1 4 2 3 4 4 5 5
改过后的代码
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=1e6+;
typedef long long LL;
typedef double db;
using namespace std;
int n;
vector<int>vc[N],vc2[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct node {
int a,pos;
friend bool operator <(const node&A,const node&B) {
return A.a>B.a||(A.a==B.a&&A.pos>B.pos);
}
}p[N]; #define ANS
int main() {
#ifdef ANS
freopen("reorder.in","r",stdin);
freopen("reorder.out","w",stdout);
#endif
read(n);
For(i,,n) {
read(p[i].a); p[i].pos=i;
vc[p[i].a].push_back(i);
}
Rep(i,n,) vc2[p[i].a].push_back(n-i+);
sort(p+,p+n+);
int ans=n;
for(int l=,r=;l<=n;) {
while(r+<=n&&p[r+].pos<p[r].pos) r++;
int ll=l,rr=r;
if(ll->=) {
int tt=lower_bound(vc2[p[l-].a].begin(),vc2[p[l-].a].end(),n-p[l].pos+)-vc2[p[l-].a].begin();
ll=ll-tt;
}
if(r+<=n) {
int tt=lower_bound(vc[p[r+].a].begin(),vc[p[r+].a].end(),p[r].pos)-vc[p[r+].a].begin();
rr=r+tt;
}
ans=min(ans,n-(rr-ll+));
l=r+; r=l;
}
printf("%d\n",ans);
Formylove;
}
/*
9
1 1 4 2 3 4 4 5 5
*/
其实这个仍然漏掉了一种情况,就是在仅有两排的情况下,其实是可以这样选的,
需要枚举中间的分界线,我一开始以为这种情况可以某一块选完来等价替代,就把wys大佬和我自己糊弄到了,但是lyc巨佬发现,因为点的密度不同,所以是不能替换的。这部分代码我懒得写了。
-----------------------------------------9-20upd-----------------------------------------
Problem B. path
题解是spfa转移凸包,虽然我并不知道这个复杂度怎么证明。但是llj巨强无比,自适应辛普森水过了这道题。
平常自适应辛普森是eps递归减小的,但是这里这样的话会炸,所以一直用的同一个eps。
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=,M=;
typedef long long LL;
typedef long double db;
using namespace std;
int n,m,s,t,x[M],y[M]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ecnt,fir[N],nxt[M],to[M];
db val[N];
void add(int u,int v) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;
} queue<int>que;
db dis[N];
int vis[N];
#define inf 1e18
#define EPS 1e-5
int dcmp(db x) { return fabs(x)<=EPS?:(x>?:-); } db spfa() {
que.push(t);
For(i,,n) dis[i]=inf;
dis[s]=;
que.push(s);
while(!que.empty()) {
int x=que.front();
que.pop(); vis[x]=;
for(int i=fir[x];i;i=nxt[i]) {
if(dcmp(dis[to[i]]-dis[x]-val[i])>) {
dis[to[i]]=dis[x]+val[i];
if(!vis[to[i]]) {
vis[to[i]]=;
que.push(to[i]);
}
}
}
}
return dis[t];
} double f(double a) {
For(i,,m) {
val[i*]=a*x[i]+(1.0-a)*y[i];
val[i*-]=val[i*];
}
return spfa();
} double sim(double x,double y) {
double mid=((x+y)/2.0);
return (y-x)/6.0*(f(x)+4.0*f(mid)+f(y));
} double calc(double l,double r) {
double mid=((l+r)/2.0);
double tp=sim(l,mid)+sim(mid,r),tpp=sim(l,r);
if(dcmp(tp-tpp)==) return tp+(tp-tpp)/15.0;
else return calc(l,mid)+calc(mid,r);
}
/*
double calc(double l,double r) {
double mid=((l+r)/2.0);
db ls=f(l),rs=f(r),ms=f(mid);
if(fabs(ls+rs-ms*2.0)<=EPS) return ms*(r-l);
else return calc(l,mid)+calc(mid,r);
}
*/ #define ANS
int main() {
#ifdef ANS
freopen("path.in","r",stdin);
freopen("path.out","w",stdout);
#endif
read(n); read(m); read(s); read(t);
For(i,,m) {
int u,v;
read(u); read(v);
add(u,v);
read(x[i]); read(y[i]);
}
db ans=calc(,);
printf("%Lf\n",ans);
Formylove;
}
NOIp2018集训test-9-4的更多相关文章
- NOIp2018集训test-10-24(am&pm)
李巨连续AK三场了,我跟南瓜打赌李巨连续AK七场,南瓜赌李巨连续AK五场. DAY1 T1 qu 按题意拿stack,queue和priority_que模拟即可.特判没有元素却要取出的情况. T2 ...
- NOIP2018 集训(三)
A题 Tree 问题描述 给定一颗 \(n\) 个点的树,树边带权,试求一个排列 \(P\) ,使下式的值最大 \[\sum_{i=1}^{n-1} maxflow(P_i, P_{i+1}) \] ...
- NOIP2018 集训(二)
A题 神炎皇 问题描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对 \((a,b)\) ,若满足 \(a+b\leq n\) 且 \(a+b\) 是 \(ab\) 的因子,则称 为神 ...
- NOIP2018 集训(一)
A题 Simple 时间限制:1000ms | 空间限制:256MB 问题描述 对于给定正整数\(n,m\),我们称正整数\(c\)为好的,当且仅当存在非负整数\(x,y\)使得\(n×x+m×y=c ...
- NOIp2018集训test-10-18 (bike day4)
这是一套简单题,这几天的考试让bike老爷感觉很绝望,说实话我也确实不知道还能怎么更简单了. 这几天的题换做llj.sxy应该都能轻松AK吧,至少随便考个250+应该不是问题吧,我越来越觉得觉得我跟他 ...
- NOIp2018集训test-10-17 (bike day3)
发现自己gradully get moodier and moodier了 负面情绪爆发地越来越频繁,根本out of control,莫名其妙地就像着了魔一样 为什么用英语大概是因为今天早上早自习因 ...
- NOIp2018集训test-10-16 (bike day2)
“毕姥爷:今天的题好简单啊,你们怎么考得这么烂啊,如果是noip你们就凉透了啊“ 今天的题难度应该是3.2.1递减的,但是我不知道哪根筋没搭对,平时我最多1h多就弃题了,今天硬生生写了2h20min的 ...
- [雅礼NOIP2018集训] day6
打满暴力好像是一种挑战,已经连续几天考试最后一个小时自闭了,因为自以为打完了暴力,然而,结果往往差强人意 大概是考试的策略有些问题 T1: 我们设$g[x]$为在x时取小于等于m个物品的最大价值,下面 ...
- [雅礼NOIP2018集训 day4]
感觉状态极差啊,今天居然爆零了 主要是以下原因: 1.又是T1看错题肝了两个小时,发现题意理解错误瞬间心态爆炸 2.T2交错了文件名 3.T3暴力子任务和正解(假的)混在一起,输出了两个答案 都想为自 ...
- [雅礼NOIP2018集训 day1]
现在才来填坑,之后还要陆续补其他几天的,可能前几天真的太颓了 T1: 题目大意:给定一个长度为n的序列,m次询问每次询问给出l,r,询问区间l到r的元素在模k意义下的最大值 数据范围当然是你暴力写不过 ...
随机推荐
- EcShop二次开发学习方法和Ecshop二次开发必备基础
ecshop二次开发学习方法 近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟.这时催生出了众多电子商务相关的php开源产品.B2C方面有Ecshop ...
- Yii2增、删、改、查
$order_model = OrderHeader::find()->where(['user_id'=>$user_id, 'order_type'=>'1'])->and ...
- 模拟+双指针——cf1244E
排一遍序然后用l,r指针进行移动,每次移动的是靠1,或靠n更近的那个指针 #include<bits/stdc++.h> using namespace std; typedef long ...
- 暴力字符串hash——cf1200E
#include<bits/stdc++.h> using namespace std; #define ll long long #define N 1000005 #define mo ...
- Ajax请求参数为文件类型
1.图片用get请求,回调函数中返回的数据就是流文件(至于是什么流文件还不清楚), 在回调函数中再使用post请求2.JS将文件像form表单一样提交到后台 : https://www.cnblo ...
- RN 真机roload
第四步:打开调试菜单 手机设备可以通过摇一摇设备打开调试菜单,也可以打开调试菜单. 可因为是平板,摇一摇不是太方便,可以在电脑端运行命令来打开调试菜单,但有时却又无法打开调试菜单(如果是使用真机调试, ...
- LaTex 插入图像,以及应用表格
插入图像 参考:http://www.ctex.org/documents/latex/graphics/ 1: \includegraphics[width=20mm]{head.png} 应用表格 ...
- Netty 相关目录
Netty 相关目录 Netty 源码学习--客户端流程分析 Netty 源码学习--服务端流程分析 Netty 源码分析--ChannelPipeline Netty 源码学习--EventLoop ...
- linux内核编译时如何根据spec指定编译包
问题: 1> rpmbuild -bb SPECS/kernel.spec --define="_topdir `pwd`" 编译 出的包并未包含kernel-firmwar ...
- [转] js对键盘输入事件绑定到特定按钮。
<script type="text/javascript" language="javascript"> document.onkeyup = f ...