T1T2是洛谷原题。Orz辉神290,被辉神吊起来打。

题 1 包裹快递

二分答案。这题似乎卡精度,不开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
*/

题 2 迎接仪式

状态定义写代码里了,比较蠢的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)的更多相关文章

  1. NOIp2018集训test-10-24(am&pm)

    李巨连续AK三场了,我跟南瓜打赌李巨连续AK七场,南瓜赌李巨连续AK五场. DAY1 T1 qu 按题意拿stack,queue和priority_que模拟即可.特判没有元素却要取出的情况. T2 ...

  2. 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++ ...

  3. NOIp2018集训test-9-19(am&pm)

    AM 这是一套在长沙考过而且我能记得全部正解的题,然后期望得分300实际得分155. T1 很套路,随便搞(我当年是怎么花大半场时间写T1并且写出现在两倍长的代码的??) //Achen #inclu ...

  4. NOIp2018集训test-9-22(am/pm) (联考三day1/day2)

    szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...

  5. NOIp2018集训test-9-17(pm)

    T1记忆(memory) 我大概是只记忆只有七秒的金鱼吧.看了下以前的代码发现真的很简单,但是考场上只打了个暴力,虽然骗了88pt.就是枚举选的是哪个串,然后vis[i]表示选了i这些位能不能猜出它, ...

  6. NOIp2018集训test-9-8(pm) (联考一day2)

    把T1题读错了,想了一个多小时发现不可做.然后打了t2,常数不优秀.然后去打t3,lct,结果打挂爆0了. 然后今天就爆炸了. 如果这是noip我今年就可以直接回去学常规了.学常规多好,多开心. 今天 ...

  7. NOIp2018集训test-9-7(pm) (联考一day1)

    又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...

  8. NOIp2018集训test-9-5(pm)

    老张说:这套题太简单啦,你们最多两个小时就可以AK啦! 题 1 数数 我看到T1就懵了,这就是老张两个小时可以AK的题的T1?? 然后我成功地T1写了1h+,后面1h打了t2.t3暴力,就很开心. 等 ...

  9. NOIp2018集训test-9-2(pm)

    其实这套题我爆0了,T1define 写成ddefine编译错误 T2有两个变量爆int 但是我看zwh不在悄悄地改了,我心里还是十分愧疚(没有)的.主要是林巨已经虐我125了要是再虐我200分我大概 ...

随机推荐

  1. linux crontab 计划任务脚本

    在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINUX中,周期执行的任务一般由cron ...

  2. centos 6.5 修改主机名

    使用 root 账号登录,编辑 vi /etc/sysconfig/network 此时的主机名如下 HOSTNAME=localhost.localdomain 修改 HOSTNAME=newnam ...

  3. Hadoop(三)YARN

    Yet Another Resources Negotiator 从Hadoop2.0版本开始引入YARN,主要功能: 集群资源管理系统 负责集群的统一管理和调度 与客户端交互,处理客户端请求 一.基 ...

  4. 经典排序背包——cf1203F

    先把收益为正数的处理掉:策略是挨个扫,扫n遍,碰到能买的就买,然后可以得到一个更新后的r 剩下的就看做是一个背包模型:物品(a,b)表示当背包体积>a时才能装下体积为b的该物品,问最多装几个 无 ...

  5. AcWing 199. 余数之和 (除法分块)打卡

    给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod ...

  6. ubuntu安装mysql 并对外暴露3306端口

    安装 sudo apt-get install mysql-client mysql-server vi /etc/mysql/mysql.conf.d/mysqld.cnf bind 127注掉 m ...

  7. VS2012编译WDM驱动

    新版的VS2012中集成了WDK8,而且WDK8中已经没有之前的Build Environment了,看来编译驱动只能通过VS2012了,直接开发WDF驱动很方便直接选取相应的模板即可,若是编译以前的 ...

  8. C++变长参数

    如果C++的变长参数经过了多轮的调用,就可能失去作用 间接引址,但是只能引用到第一个变长参数. va_list marker;   va_start(marker, format); s_logger ...

  9. 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)

    题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...

  10. 条件sql ibatis

    <!-- 多条件查询 --><select id="MS-CUSTOM-PANDECT-INFO-BY-CONDITIONS" resultMap="R ...