• 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

  • 相关阅读:
    【算法】273-每周一练 之 数据结构与算法(Tree)
    【算法】272-每周一练 之 数据结构与算法(Dictionary 和 HashTable)
    【CSS】271- RGB、HSL、Hex网页色彩,看完这篇全懂了
    【Redis】270- 你需要知道的那些 redis 数据结构
    Hybird App 应用开发中5个必备知识点复习
    【Vuejs】269- 提升90%加载速度——vuecli下的首屏性能优化
    【富文本】268- 富文本原理了解一下?
    HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (二)
    HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (一)
    HTML5 CSS3 专题 : 拖放 (Drag and Drop)
  • 原文地址:https://www.cnblogs.com/kalginamiemeng/p/Exam20191025.html
Copyright © 2020-2023  润新知