NOIp2018集训test-9-6(pm)
T1T2是洛谷原题。Orz辉神290,被辉神吊起来打。
二分答案。这题似乎卡精度,不开long double二分500次都过不去。
//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=;
typedef long long LL;
typedef long double db;
using namespace std;
int n,x[N],y[N],s[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;
} int ck(db v) {
if(v==0.0) return ;
db now=0.0;
For(i,,n) {
db ti=((db)s[i])/(1.0*v);
if(now+ti>(db)y[i]) return ;
now=max(now+ti,(db)x[i]);
}
return ;
} #define ANS
int main() {
#ifdef ANS
freopen("express.in","r",stdin);
freopen("express.out","w",stdout);
#endif
read(n);
For(i,,n) {
read(x[i]); read(y[i]); read(s[i]);
}
db l=0.0,r=1e7;
int cnt=;
while(cnt<) {
cnt++;
db mid=((l+r)/2.0);
if(ck(mid)) r=mid;
else l=mid;
}
printf("%.2Lf\n",l);
Formylove;
}
/*
3
1 2 2
6 6 2
7 8 4
*/
状态定义写代码里了,比较蠢的dp,但是当时我把自己蠢哭了,只考虑了这样换((()))没考虑这样换(())(())(),写了个奇奇怪怪的dp,然后只有50
//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=;
typedef long long LL;
typedef double db;
using namespace std;
int f[][][][],a[N],n,K,ans;
char s[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;
} void get_max(int &a,int b) { if(b>a) a=b; } #define ANS
int main() {
#ifdef ANS
freopen("welcome.in","r",stdin);
freopen("welcome.out","w",stdout);
#endif
read(n); read(K);
scanf("%s",s+);
For(i,,n) {
if(s[i]=='j') a[i]=;
else a[i]=;
}
memset(f,,sizeof(f));
int inf=f[][][][],o=;
f[o][][][]=; //f[i][j][k][l] 前i个数换了j次,有k次是1,第i个数换没有
For(i,,n) {
o^=;
memset(f[o],,sizeof(f[o]));
For(j,,K*) For(k,,K) For(l,,) if(f[o^][j][k][l]!=inf) {
get_max(f[o][j][k][],f[o^][j][k][l]+((i>)&&(a[i-]^l)&&!a[i]));
get_max(f[o][j+][k+a[i]][],f[o^][j][k][l]+((i>)&&(a[i-]^l)&&a[i]));
}
}
For(i,,K) {
get_max(ans,f[o][i*][i][]);
get_max(ans,f[o][i*][i][]);
}
printf("%d\n",ans);
Formylove;
}
题 3 与众不同
从后往前扫一遍就可以知道每个数开头的连续的互不相同的序列的长度,n^2做法就每个询问挨着枚举开头,长度和当前结尾减开头+1取min。
去掉取min的过程就可以线段树了,发现对于一个数,完美序列包涵它的开头是一段连续区间,预处理出最靠前的位置,询问离线下来按结尾排序,每次把当前结尾之外的点的包涵它的开头的区间长度-1即可。
//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=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,a[N],b[N],ls[N],sz,f[N],r[N],l[N],ans[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;
} #define lc (x<<1)
#define rc ((x<<1)|1)
#define mid ((l+r)>>1)
int sg[N<<],lz[N<<];
void down(int x,int l,int r) {
if(!lz[x]) return;
sg[lc]+=lz[x]; sg[rc]+=lz[x];
lz[lc]+=lz[x]; lz[rc]+=lz[x];
lz[x]=;
} void update(int x,int l,int r,int ql,int qr,int v) {
if(l>=ql&&r<=qr) {
sg[x]+=v; lz[x]+=v; return;
}
down(x,l,r);
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
sg[x]=max(sg[lc],sg[rc]);
} int qry(int x,int l,int r,int ql,int qr) {
if(l>=ql&&r<=qr) return sg[x];
down(x,l,r);
if(qr<=mid) return qry(lc,l,mid,ql,qr);
if(ql>mid) return qry(rc,mid+,r,ql,qr);
return max(qry(lc,l,mid,ql,qr),qry(rc,mid+,r,ql,qr));
} struct node {
int id,l,r;
}qs[N];
vector<node>vc[N]; #define ANS
int main() {
#ifdef ANS
freopen("diff.in","r",stdin);
freopen("diff.out","w",stdout);
#endif
read(n); read(m);
For(i,,n) read(a[i]),b[i]=a[i];
sort(b+,b+n+);
sz=unique(b+,b+n+)-(b+);
For(i,,n) a[i]=lower_bound(b+,b+sz+,a[i])-b;
Rep(i,n,) {
f[i]=f[i+]+;
if(!r[i+]) r[i]=i;
else r[i]=r[i+];
if(ls[a[i]]) {
if(ls[a[i]]-<r[i]) r[i]=ls[a[i]]-;
f[i]=min(f[i],ls[a[i]]-i);
}
update(,,n,i,i,f[i]);
ls[a[i]]=i;
}
For(i,,n) l[i]=i;
For(i,,n) l[r[i]]=min(l[r[i]],i);
Rep(i,n-,) l[i]=min(l[i],l[i+]);
For(i,,m) {
int l,r;
read(l); read(r);
l++; r++;
qs[i].l=l; qs[i].r=r;
qs[i].id=i;
vc[qs[i].r].push_back(qs[i]);
}
Rep(i,n,) {
int upp=vc[i].size();
For(j,,upp-) {
node q=vc[i][j];
ans[q.id]=qry(,,n,q.l,q.r);
}
if(l[i]<=i)
update(,,n,l[i],i,-);
}
For(i,,m) printf("%d\n",ans[i]);
Formylove;
}
/*
9 2
2 5 4 1 2 3 6 2 4
0 8
2 6
*/
NOIp2018集训test-9-6(pm)的更多相关文章
- NOIp2018集训test-10-24(am&pm)
李巨连续AK三场了,我跟南瓜打赌李巨连续AK七场,南瓜赌李巨连续AK五场. DAY1 T1 qu 按题意拿stack,queue和priority_que模拟即可.特判没有元素却要取出的情况. T2 ...
- NOIp2018集训test-9-21(am/pm)
Am DAY1 抄代码 送分题 //Achen #include<bits/stdc++.h> #define For(i,a,b) for(int i=(a);i<=(b);i++ ...
- NOIp2018集训test-9-19(am&pm)
AM 这是一套在长沙考过而且我能记得全部正解的题,然后期望得分300实际得分155. T1 很套路,随便搞(我当年是怎么花大半场时间写T1并且写出现在两倍长的代码的??) //Achen #inclu ...
- NOIp2018集训test-9-22(am/pm) (联考三day1/day2)
szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...
- NOIp2018集训test-9-17(pm)
T1记忆(memory) 我大概是只记忆只有七秒的金鱼吧.看了下以前的代码发现真的很简单,但是考场上只打了个暴力,虽然骗了88pt.就是枚举选的是哪个串,然后vis[i]表示选了i这些位能不能猜出它, ...
- NOIp2018集训test-9-8(pm) (联考一day2)
把T1题读错了,想了一个多小时发现不可做.然后打了t2,常数不优秀.然后去打t3,lct,结果打挂爆0了. 然后今天就爆炸了. 如果这是noip我今年就可以直接回去学常规了.学常规多好,多开心. 今天 ...
- NOIp2018集训test-9-7(pm) (联考一day1)
又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...
- NOIp2018集训test-9-5(pm)
老张说:这套题太简单啦,你们最多两个小时就可以AK啦! 题 1 数数 我看到T1就懵了,这就是老张两个小时可以AK的题的T1?? 然后我成功地T1写了1h+,后面1h打了t2.t3暴力,就很开心. 等 ...
- NOIp2018集训test-9-2(pm)
其实这套题我爆0了,T1define 写成ddefine编译错误 T2有两个变量爆int 但是我看zwh不在悄悄地改了,我心里还是十分愧疚(没有)的.主要是林巨已经虐我125了要是再虐我200分我大概 ...
随机推荐
- 防火墙---CentOS
1.查看防火墙状态 firewall-cmd --state 2.停止防火墙 systemctl stop firewalld.service 3.禁止开机启动防火墙 systemctl disabl ...
- 【JavaWeb项目】一个众筹网站的开发(六)后台用户权限控制
登陆成功进入控制面板后 左侧的菜单是共同的元素,抽取出来做静态包含 要求必须是按照不同的用户得到不同的菜单 用户做了权限限制,哪个用户能操作哪些内容(链接.按钮.内容) 一.RBAC权限模型 权限管理 ...
- Java多线程常用方法的使用
Java多线程的常用方法基本分为:获取当前线程的操作,线程休眠sleep()方法,线程让步yield()方法,等待其他线程终止join()方法,线程停止的一系列方法. 一.获取当前线程的操作 1. ...
- Java中基本类型的包装类
基本类型包装类: 项目中我们常常放弃基本类型,用基本类型的包装类 基本类型包装类有哪些: Int--Integer char--Character double--Double 以Intger为例讲述 ...
- vue 表格 多选 换页保存前一页的状态
表格多选 点击下一页,上一页的状态没消失. 在表格 添加 row-key="id" 在表格行里添加 reserve-selection
- 【JNDI】Java Naming and Directory Interface
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Conn ...
- 【LeetCode 12】整数转罗马数字
题目链接 [题解] (涨知识了..原来罗马数字是这么回事.. 把{1,4,5,9,10,40,50,90,100,400,500,900,1000}这些东西的罗马数字放在一个数组里面. 每次从大到小减 ...
- TrMemo控件
unit TrMemo; {$R-} interface uses Windows, Messages, Controls, StdCtrls, Classes; const TMWM__Specia ...
- iOS 如何计算UIWebView的ContentSize
首选要等UIWebView加载内容后,然后在它的回调方法里将webview的高度Height设置足够小,就设置为1吧,因为这样才能用 sizeThatFits才能计算出webview得内容大小 - ( ...
- php开发面试题---php面向对象详解(对象的主要三个特性)
php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...