zoukankan      html  css  js  c++  java
  • 19-10-25-G-悲伤

    此题未通过 [ 老帅哥 ] 认证。

    ZJ一下:

    T1,明显是二分答案+$dij/SPFA$

    T2,没看懂题。

    T3,打了一个$Theta(N^2)$暴力。

    事实上……

    T1,T2死了。

    T1中

    每次可以向上下左右四个方向走一格,走一格用时1 秒。

    你有一个机器,使得每次在上下移动一步时,用时为k 秒。

    你确定向上下不可以走么(一定要用机器???)

    明明可以向上下左右四个方向走一格,走一格用时1

    不管了,语文问题。

    最后在作者××巨佬的自动防AK系统的作用下。

    47
    Miemeng 0
    02:58:59
    0
    02:58:59
    30
    02:59:00
    30
    02:59:00

    我祝福你,作者

    %%%ZZD

    nmsl

    题解:

    T1

    一大句话题意:

    有一个网格图,有格子不能走,向上下走需要$k$秒,向左右走需要$1$秒,问从$(x1,y1)$到$(x2,y2)$的最短时间为$s$时$k$的值。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <queue>
    #define LF double
    #define N 111
    
    using namespace std;
    
    const LF eps=1e-5;
    int mp[N][N];
    int lines,cols;
    int stx,sty,fix,fiy;
    LF targ,dis[N][N];
    bool is_v[N][N];
    struct POINT{
    	int x,y;
    	double dis;
    	POINT(){}
    	POINT(int a,int b,double c):x(a),y(b),dis(c){}
    	friend bool operator > (const POINT &a,const POINT &b){
    		return a.dis>b.dis;
    	}
    };
    priority_queue<POINT,vector<POINT>,greater<POINT> >q;
    inline bool inmp(int x,int y){
    	return x>=1&&x<=lines&&y>=1&&y<=cols&&mp[x][y]==0;
    }
    LF check(LF ud){
    	memset(is_v,0,sizeof is_v);
    	for(int i=1;i<=lines;i++)
    		for(int j=1;j<=cols;j++)
    			dis[i][j]=1e10;
    	dis[stx][sty]=0;
    	q.push(POINT(stx,sty,0.0));
    	while(!q.empty()){
    		int fx=q.top().x,fy=q.top().y;
    //		cout<<fx<<" "<<fy<<" "<<mp[fx][fy]<<" "<<dis[fx][fy]<<endl;
    		q.pop();
    		if(is_v[fx][fy])continue;
    		is_v[fx][fy]=1;
    		if(inmp(fx+1,fy)&&dis[fx+1][fy]>dis[fx][fy]+ud){//puts("A");
    			dis[fx+1][fy]=dis[fx][fy]+ud;
    			q.push(POINT(fx+1,fy,dis[fx+1][fy]));
    		}
    		if(inmp(fx-1,fy)&&dis[fx-1][fy]>dis[fx][fy]+ud){//puts("B");
    			dis[fx-1][fy]=dis[fx][fy]+ud;
    			q.push(POINT(fx-1,fy,dis[fx-1][fy]));
    		}
    		if(inmp(fx,fy+1)&&dis[fx][fy+1]>dis[fx][fy]+1.0){//puts("C");
    			dis[fx][fy+1]=dis[fx][fy]+1.0;
    			q.push(POINT(fx,fy+1,dis[fx][fy+1]));
    		}
    		if(inmp(fx,fy-1)&&dis[fx][fy-1]>dis[fx][fy]+1.0){//puts("D");
    			dis[fx][fy-1]=dis[fx][fy]+1.0;
    			q.push(POINT(fx,fy-1,dis[fx][fy-1]));
    		}
    	}
    	return dis[fix][fiy];
    }
    int main(){
    //	freopen("1.in" ,"r",stdin);
    //	freopen("maze.in" ,"r",stdin);
    	freopen("maze.out","w",stdout);
    	scanf("%d%d%d%d%d%d",&lines,&cols,&stx,&sty,&fix,&fiy);
    	for(int i=1;i<=lines;i++)
    		for(int j=1;j<=cols;j++)
    			scanf("%d",&mp[i][j]);
    	scanf("%lf",&targ);
    	LF l=0,r=lines*cols;
    	while(r-l>eps){
    		LF mid=(l+r)/2;
    //		cout<<l<<" "<<r<<" "<<check(mid)<<endl;
    		if(check(mid)>targ) r=mid;
    		else l=mid;
    	}
    	printf("%.3lf
    ",l);
    //	cout<<clock()<<endl;
    }
    

    T2

    T3

  • 相关阅读:
    Algorithm Gossip (48) 上三角、下三角、对称矩阵
    .Algorithm Gossip (47) 多维矩阵转一维矩阵
    Algorithm Gossip (46) 稀疏矩阵存储
    Algorithm Gossip (45) 费氏搜寻法
    Algorithm Gossip (44) 插补搜寻法
    Algorithm Gossip (43) 二分搜寻法
    Algorithm Gossip (42) 循序搜寻法(使用卫兵)
    Algorithm Gossip (41) 基数排序法
    Algorithm Gossip (40) 合并排序法
    AlgorithmGossip (39) 快速排序法 ( 三 )
  • 原文地址:https://www.cnblogs.com/kalginamiemeng/p/Exam20191025.html
Copyright © 2011-2022 走看看