jzoj3522 迷宮花園 二分 spfa

2021-08-29 14:02:35 字數 1717 閱讀 5829

description

給定乙個一定存在從起點到終點的路徑的四聯通迷宮。已知tar左右方向移動的時間為1,上下移動的時間為未知實數v。求當tar從起點到終點的最短移動時間為已知實數l時,未知實數v是多少。

input

輸入資料報含多個測試點。第一行為乙個整數t,表示測試點的數目。

對於每乙個測試點,第一行包含實數l和兩個整數r,c。r為迷宮的上下長度,c為迷宮的左右長度。

之後的r行,每行包含c個字元。其中空格表示空地,s表示起點,e表示終點,#表示圍牆。

output

對於每乙個測試點,在單獨的一行內輸出未知實數v,輸出保留5位小數。

sample input

2                                 

2.5 4 5

#####

#s #

# e#

#####

21 13 12

############

#s## #e#

# ## # # #

# # # # #

### # # # #

# # # # #

# ## # # #

## # # # #

### # # # #

## # # # #

# ## # #

# # #

############

sample output

0.50000

0.21053

data constraint

20%的資料,1≤ r,c ≤ 10。

100%的資料,1≤ r,c ≤ 100,0≤ v <10。

分析:未知實數v的增大只能導致距離的增加,而不能導致距離的減小。

所以我們進行二分答案。然後逼近我們要找的值。

相當於已知函式f(x)[最短路徑表示],我們要找到乙個數x,使得x = y0(y0為已知的l)

**

#include #include #include #include #include #define n 40005

#define eps 1e-7

#define inf 1e9

using namespace std;

dequeq;

struct arr

a[n];

double d[n],tim;

char ch[105][105];

int b[105][105],n,m,sum,tot;

int ls[n],s,t;

bool vis[n];

void init()

void add(int x, int y, double w)

void spfa(double v)

}} }

}int main()

}} for (int i = 1; i <= n; i++)

for (int j = 1; j <= m; j++)

if (b[i][j])

double l = 0, r = tim, ans = 0;

while (r - l > eps)

printf("%.5lf\n", ans);

init();

}}

二分 記搜 JZOJ 3522 迷宮花園

description 給定乙個一定存在從起點到終點的路徑的四聯通迷宮。已知tar左右方向移動的時間為1,上下移動的時間為未知實數v。求當tar從起點到終點的最短移動時間為已知實數l時,未知實數v是多少。input 輸入資料報含多個測試點。第一行為乙個整數t,表示測試點的數目。對於每乙個測試點,第一...

JZOJ 二分 抄書

與書的複製差不多 洛谷 書的複製 但是只要輸出最大的時間 樣例輸入9 3 100 200 300 400 500 600 700 800 900樣例輸出1700樣例解釋1 1500 100 200 300 400 500 2 1300 600 700 3 1700 800 900 1300 1500...

二分 抄書 (jzoj 2123)

有n本書,分給m個人抄,每個人只能拿到連續的書 不能把一本書分開 問抄書最多的人要抄多少頁9 3 100 200 300 400 500 600 700 800 9001700對於10 的資料,有n 10 對於50 的資料,有n 500 對於100 的資料,有n 3000 這道題很可能想到dp但會炸...