1 条题解

  • 0
    @ 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
    上传者