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分我大概 ...
随机推荐
- 【LeetCode 10】正则表达式匹配
题目链接 [题解] 看到这个题解 写的代码. 就是加个备忘录法.优化一下暴力的做法. 匹配的时候如果遇到号的话,就两种可能.不再考虑它前面一个字符了. 跳过这个或者.或者继续用前面那个字符匹配. 即d ...
- contest-20191021
文化课读的真不开心 回来竞赛 假人 sol 根据不等式有 abs(a-b)+abs(b-c)>=abs(a-c) 那么每一个都会选. 可以发现每一段只会选在端点上(否则移到端点更优). 那么dp ...
- [20190725NOIP模拟测试8]题解
Orz T1 大水题,考场上看到题目中什么前几位相同末尾加字母莫名慌的一批 后来发现直接无脑哈希就能$O(n)$ KMP同样可切 仔细读题,数组别开小 #include<cstdio> # ...
- (转)openfire插件开发(三)通过http方式向openfire客户端发信息
转:http://blog.csdn.net/hzaccp3/article/details/19964655 需求: 通过http方式,向openfire客户端发信息(非XMPP协议)openfi ...
- npm install 超时 国内 切换源; npm ERR! code ELIFECYCLE;
install 超时 查看npm源地址 npm config get registry #http://registry.npmjs.org 为国外镜像地址 设置阿里云镜像 npm config se ...
- robotframework+selenium2library之上传本地文件
针对将本地的文件上传到测试系统,selenium2library提供了一个关键词 choose file choose file jquery=*[name='Filedata']+label: ...
- yum设置代理
echo "proxy=http://[proxy_url]:8080" >> /etc/yum.conf
- Java内存通道
对文件执行I/O的另一种方法是将文件的一个区域映射到物理内存,并将其作为内存数组.可以使用MappedByteBuffer来执行内存映射文件I/O. 要使用内存映射文件I/O,请为文件获取FileCh ...
- JSON.toJSONString()null值转“”
public static void main(String[] s) { CybWmsCommoditiesVo cybWmsCommoditiesVo = new CybWmsCommoditie ...
- 回退ios版本
https://ipsw.me/ 访问以上网址,选择自己对应的手机,选择可下载的版本数据,打开itunes,自动备份数据,然后按住alt+左键点击恢复... 成功后. 然后进行备份自己的之前备份的数据 ...