EZ 2018 04 21 NOIP2018 模拟赛(九)
终于停止了掉Rating的浪潮!
这次200分才Rank10,而且很多人并列
庆幸T2最后20分钟发现期望的算法打错了,然后拿到了50pts,250收场
T1 水题*1
这道题不仅做过,而且本来难度就很低,不A对不起自己
主要是一个追及问题,我们枚举所有的人初始时的位置即可
CODE
#include<cstdio>
using namespace std;
const int N=1005;
int n;
double v,u,d[N],c[N],ans;
int main()
{
//freopen("A.in","r",stdin); freopen("A.out","w",stdout);
register int i,j;
scanf("%d%lf%lf",&n,&v,&u);
for (i=1;i<=n;++i)
scanf("%lf",&c[i]);
for (i=1;i<=n;++i)
scanf("%lf",&d[i]);
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
ans+=u/(c[i]-(j-1)*d[i]-v);
printf("%.3lf",ans);
return 0;
}
T2 水题*2
话说再给我半小时小时应该可以A了这题(A的人比T3多了去了)
写完DFS后其实就有两条路:记忆化||概率DP
记忆化比较舒服,但我还是太蒟(主要是正着来比较难写)
而且这题的DP转移也比较好写,因此我们考虑倒着DP
设f[i][j]表示还剩下j(minites)时在i点时的期望
因此转移的时候只要与它相连的所有可行的点转移即可,最后再对起点分类讨论
CODE
#include<cstdio>
#include<cstring>
using namespace std;
typedef double DB;
const int N=105,T=500;
struct edge
{
int to,next,v;
}e[N*N<<1];
DB f1[N][T],f2[N][T];
int n,m,t,head[N],h1[N],h2[N],c[N],cnt,x,y,z;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline void add(int x,int y,int z)
{
e[++cnt].to=y; e[cnt].v=z; e[cnt].next=head[x]; head[x]=cnt;
}
int main()
{
//freopen("B.in","r",stdin); freopen("B.out","w",stdout);
memset(e,-1,sizeof(e));
memset(head,-1,sizeof(head));
register int i,j,k;
read(n); read(m); read(t);
for (i=1;i<=n;++i)
read(c[i]),read(h1[i]),read(h2[i]);
for (i=1;i<=m;++i)
{
read(x); read(y); read(z);
add(x,y,z); add(y,x,z);
}
for (j=t;j>=1;--j)
for (i=1;i<=n;++i)
{
int res=0;
for (k=head[i];k!=-1;k=e[k].next)
if (j+e[k].v+c[e[k].to]<=t) ++res;
f1[i][j]=h1[i]; f2[i][j]=h2[i];
if (!res) continue;
for (k=head[i];k!=-1;k=e[k].next)
if (j+e[k].v+c[e[k].to]<=t)
{
f1[i][j]+=f1[e[k].to][j+e[k].v+c[e[k].to]]/res;
f2[i][j]+=f2[e[k].to][j+e[k].v+c[e[k].to]]/res;
}
}
DB ans1=0,ans2=0;
int res=0;
for (i=1;i<=n;++i)
if (c[i]<=t) ++res;
for (i=1;i<=n;++i)
if (c[i]<=t) ans1+=f1[i][c[i]]/res,ans2+=f2[i][c[i]]/res;
printf("%.5lf %.5lf",ans1,ans2);
return 0;
}
T3 水题*3
状压DP即可(怎么这么多dalao直接DFS艹过去了)
这题我们需要3个状态对于所有任务:0表示还未取,1表示取来了但是还没有送到,2表示已经送到了,因此f[i][j]表示在i点时状态为j(三进制数)最短时间
注意如果只设01那么你难以区分没取和取了没送到的;或是取了没送到的和取了送到的
而且可以一次接多个任务,因此可能会有中转点的干扰
所以每次转移时枚举每一个点再搞一下即可
注意1只能由0转移过来,2只能由1转移过来,千万不能直接从0转移到2
3的幂次可以预处理,因此复杂度O(3^k*k*n)
CODE
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=25,Q=15,INF=1e9;
struct data
{
int s,t,l,r;
}a[Q];
int dis[N][N],pow[Q],f[N][60000],n,m,q,ans=-1,x,y,z;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch=tc();
while (ch<'0'||ch>'9') ch=tc();
while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=tc();
}
inline int max(int a,int b)
{
return a>b?a:b;
}
inline int min(int a,int b)
{
return a<b?a:b;
}
inline void init(void)
{
register int i,j;
for (pow[0]=1,i=1;i<=q;++i)
pow[i]=pow[i-1]*3;
for (i=1;i<=n;++i)
for (j=0;j<pow[q];++j)
f[i][j]=INF; f[1][0]=0;
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
dis[i][j]=INF;
for (i=1;i<=j;++i)
dis[i][i]=0;
}
inline void floyd(void)
{
register int i,j,k;
for (k=1;k<=n;++k)
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
inline int get_num(int x,int id)
{
return x/pow[id]%3;
}
inline int count(int x)
{
int res=0;
while (x)
{
if (x%3==2) ++res;
x/=3;
}
return res;
}
int main()
{
//freopen("C.in","r",stdin); freopen("C.out","w",stdout);
register int i,j,k;
read(n); read(m); read(q);
init();
for (i=1;i<=m;++i)
{
read(x); read(y); read(z);
dis[x][y]=min(dis[x][y],z);
}
floyd();
for (i=0;i<q;++i)
read(a[i].s),read(a[i].t),read(a[i].l),read(a[i].r);
for (j=0;j<pow[q];++j)
for (k=0;k<q;++k)
{
int id=get_num(j,k);
if (id==0) continue;
if (id==1)
{
for (i=1;i<=n;++i)
if (f[i][j-pow[k]]+dis[i][a[k].s]<=a[k].r) f[a[k].s][j]=max(a[k].l,min(f[i][j-pow[k]]+dis[i][a[k].s],f[a[k].s][j]));
} else
{
for (i=1;i<=n;++i)
if (f[i][j-pow[k]]+dis[i][a[k].t]<=a[k].r) f[a[k].t][j]=min(f[i][j-pow[k]]+dis[i][a[k].t],f[a[k].t][j]);
}
}
for (i=1;i<=n;++i)
for (j=0;j<pow[q];++j)
if (f[i][j]!=INF) ans=max(ans,count(j));
printf("%d",ans);
return 0;
}
EZ 2018 04 21 NOIP2018 模拟赛(九)的更多相关文章
- EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛
难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...
- EZ 2018 04 13 NOIP2018 模拟赛(八)
这次的题目都是什么鬼? 玄学乱搞+肉眼看CODE+倒着搜索? 好吧是我ZZ了 链接在此 T1 玄学乱搞 由于考场上写的部分分做法忘记讨论n<=2000时的情况,少得了30pts 很容易得到一个基 ...
- EZ 2018 04 06 NOIP2018 模拟赛(七)
我是链接 这次是真的惨,码了将近2hours的可持久化线段树炸掉了! 而且本地拍了一万年也没发现哪里炸了. T1 压位的入门题,话说这道题能拿个99分就可以了(100分要FFT) 对于暴力,就是暴力找 ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...
- EZ 2018 06 02 NOIP2018 模拟赛(十七)
这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...
- EZ 2018 05 26 NOIP2018 模拟赛(十六)
这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...
- EZ 2018 05 20 NOIP2018 模拟赛(十五)
这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...
随机推荐
- nodejs图像处理模块
首先是搜索了npm包的性能比较,找到了这篇: https://github.com/ivanoff/images-manipulation-performance 性能最好的当属sharp,由于安装不 ...
- python自学——文件处理(强制刷新)
# 文件的刷新flash# 为什么要刷新文件呢?# 首先我们就要知道电脑是怎么储存信息的,# 写的代码保存在缓存中当缓存满了之后就会将内容储存到硬盘中. # 那这个跟刷新有什么关系呢?# 系统也会自动 ...
- 初识java内存区域
目录: 1.运行时数据区域 2.对象的创建 3.对象的内存布局 4.对象的访问定位 一.运行时数据区域 基本的java虚拟机运行时数据区如下图: 下面我们就来逐个认识这几个运行时的数据区域 1.程序计 ...
- SELECT查询结果集INSERT到数据表
简介 将查询语句查询的结果集作为数据插入到数据表中. 一.通过INSERT SELECT语句形式向表中添加数据 例如,创建一张新表AddressList来存储班级学生的通讯录信息,然后这些信息恰好存在 ...
- 一般处理程序HttpHandler的应用
ashx 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名.一个httpHandler接受并处理一个http请求,类比于Java中的servlet.类比于在Ja ...
- (笔记)MySQL 之 Metadata Locking 研究(5.5版本)
MySQL5.5 中引入了 metadata lock. 顾名思义,metadata lock 不是为了保护表中的数据的,而是保护 database objects(元数据)的.包括表结构.sch ...
- ConcurrentModificationException 集合并发修改异常 解决
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /** * 问题? * 有一个集合, ...
- Hyper-v虚拟化
1.打开Hyper-V管理器,新建虚拟机 2.点击下一步,继续设置 3.设置虚拟机名称和存储位置,点击选择打钩,自定义路径 4.设置虚拟机运行内存 5.设置虚拟机设置好的网络 6.创建虚拟磁盘 7创建 ...
- JSR规范
JSR是JavaSpecification Requests的缩写,意思是Java 规范提案.是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人都 ...
- Ecstore Nginx Rewrite(去掉链接中的index.php) ECSTORE 伪静态
一.修改 nginx.conf文件,添加如下代码: if ($request_uri ~ (.+?\.php)(|/.+)$ ){ break; } if (!-e $request_filename ...