1 条题解
-
0赵青海 (huhe) LV 7 SU @ 2021-8-8 10:57:32
C++ :
#include<bits/stdc++.h> #define rg register #define il inline #define co const template<class T>il T read(){ rg T data=0,w=1;rg char ch=getchar(); for(;!isdigit(ch);ch=getchar())if(ch=='-') w=-w; for(;isdigit(ch);ch=getchar()) data=data*10+ch-'0'; return data*w; } template<class T>il T read(rg T&x) {return x=read<T>();} typedef long long ll; co int N=5e4+1; co double eps=1e-3; int n,m,st,ed,t; int head[N],edge[N],next[N],tot; double d[N],s[N],leng[N]; bool v[N]; il void add(int x,int y){ edge[++tot]=y,next[tot]=head[x],head[x]=tot; } il int f(char ch){ switch(ch){ case 'S': t=0;return 1000; case 'G': t=1;return 500; case 'D': t=2;return 300; case 'T': t=3;return 200; case 'K': t=4;return 150; } return -1; } bool dfs(int x){ v[x]=1; for(int i=head[x];i;i=next[i]){ int y=edge[i];double z=leng[i]; if(d[y]>d[x]+z){ d[y]=d[x]+z; if(v[y]||dfs(y)) return 1; } } v[x]=0; return 0; } bool pd(double x){ for(int i=1;i<=m;++i) leng[i]=x-s[i]; memset(v,0,sizeof v); memset(d,0x3f,sizeof d); for(int i=1;i<N;++i) if(dfs(i)) return 1; return 0; } int main(){ read(m); for(int i=1;i<=m;++i){ static char str[150]; scanf("%s",str),n=strlen(str); int x=0; bool flag=0; for(int j=0;j<n;++j){ if(isdigit(str[j])) x=x*10+str[j]-'0'; else if(str[j]=='-'){ if(!flag) st=x+t*10000; flag=1; x=0; } else s[i]+=f(str[j]); } ed=x+t*10000; add(st,ed); } double l=0,r=0x7fffffff,ans=-1; // edit 1: -1 while(r-l>eps){ double mid=(l+r)/2; if(pd(mid)) l=ans=mid; else r=mid; } printf("%.0lf\n",ans); return 0; }
- 1
信息
- ID
- 304
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 6
- 上传者