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 ...
随机推荐
- OkHttp实现文件上传进度
文件上传就一个没刻度的进度条在那里转怎么行,本篇带你实现上传进度,为你的进度条添加刻度吧,啥都不说了,重点重写RequestBody,看代码 import com.squareup.okhttp.*; ...
- Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- CSS 实例之打开大门
本个实例主要的效果如下图所示 本案例主要运用到了3D旋转和定位技术.具体步骤如下: 1.首先在页面主体加三个很简单的div标签: <div class="door"> ...
- go语言练习:sha256、sha512哈希算法
package main import ( "fmt" "crypto/sha256") func main() { str:="test hash. ...
- 【SPL标准库专题(9)】 Datastructures:SplObjectStorage
PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...
- 结合 spring 使用阿里 Druid 连接池配置方法
1.数据源 <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.D ...
- 关于 Azure Windows VM 的磁盘和 VHD
就像其他任何计算机一样,Azure 中的虚拟机将磁盘用作存储操作系统.应用程序和数据的位置. 所有 Azure 虚拟机都至少有两个磁盘,即 Windows 操作系统磁盘和临时磁盘. 操作系统磁盘基于映 ...
- Jboss7或者wildfly部署war包的问题 1
1.Jboss的日志系统(standalone模式) 在介绍案例分析之前先来介绍一下Jboss提供的日志系统,下载EAP的zip包解压后的结构如下: 在standalone目录下有两个文件standa ...
- 【转】Java学习---10个测试框架介绍
[原文]https://www.toutiao.com/i6594302925458113027/ JAVA 程序员需要用到 10 个测试框架和库 Java 程序员需要用到十大单元测试和自动化集成测试 ...
- C# Excel操作类 ExcelHelper
实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...