有乙個快遞員要依次到達n個地方送包裹,每個地方有乙個簽收時間的區間[l[i],r[i]],必須要在時間r[i]之前(包括r[i])前送達,如果到達時間早於l[i],那麼就必須等到時間l[i],送好才能走。籤包裹的時間不計。
這個快遞員希望車的最大速度盡可能的小,但是又要保證他的所有包裹都能送到。求這個最小的最大速度是多少。(精確到0.01)
感覺就是赤裸裸的二分…每次簽完就馬上最大速度到後乙個然後籤或者等著籤然後再跑…還是比較簡單的。
為了方便起見,把所有的路程都乘了1000。
code
#include
#include
#include
#include
#define ll long long
#define m 200005
using
namespace
std;
void read(ll &x)
struct aca[m];
ll n;
bool ch(ll v)
return1;}
int main()
for (; l<=r; )
printf("%.2f\n",res/1000.0);
return
0;}
雖然比賽的時候就a了不過中間查了兩個錯,不然估計就 爆零了…乙個是讀入的問題,因為讀入的不是位置而是距離前乙個簽收點的距離然後一開始以為是距離但是樣例還是過了…不過當時為了保險起見對著看了樣例解釋。
然後還有乙個就是二分的最大值一開始直接設成最後乙個距離(因為一開始看成位置然後忘了改回來了),不過好在最後也查出來了。但是這個還是覺得挺險的。
有一張地圖,一開始主角的位置確定(x,y),中間有n個障礙物位置分別是(xx[i],yy[i]),以及m個詢問。詢問(x,y)走到(qx[i],qy[i])需要操作多少次。
從乙個點出發可以向四邊走(沒有障礙物),然後就一直朝那個方向走,直到碰到障礙物。如果走方向上沒有障礙物或者出口就會一直走下去。
注意:各出口可以看做不在同一關,不會互相影響。
看起來就像bfs,其實就是bfs
p70:
1<=出現的所有座標<=1000
就可以很方便的存答案了。一開始把開始位置放進去,然後把障礙物放進去。然後每次模擬這樣滑過來,滑出去了就停,碰到障礙物就加進佇列然後停。對於每個點記一下從四個方向來的操作次數然後求個最小值。
首先離散一下。
對於每個x,y都記錄一下在那一行(列)上的障礙物或者詢問。
然後從起點出發,也是滑,從當前的位置開始向後滑,然後一碰到障礙物就停,然後將新滑出來的點離散,如果離散不了表示這個點走不了了。然後就不加佇列,反之就加進去。
實現挺麻煩的…寫了四個。
#include
#include
#include
#include
#include
#include
#define pb push_back
#define ll long long
#define pii pair
#define a first
#define b second
#define mp make_pair
#define m 100005
using namespace std;
void read(int &x)
int n,m,xx[m],yy[m],qx[m],qy[m],mxx,mxy;
struct aaa
struct ac;
int dis[1005][1005][5];
bool can[1005][1005];
ac cl(int
x,int
y,int d,int t);
else
return (ac);
}queueq;
void solve(int
x,int
y) for (i=0; i<4; i++)if (dis[x][y][i]==-1&&can[x+cx[i]][y+cy[i]])q.push(cl(x,y,i,1));
for (; !q.empty(); )
for (i=1; i<=m; i++)
}printf("%d ",res);
}}
}p70;
struct ccc
return
0; }
int chy(int l,int r,int
x) return
0; }
void clx(int
x) void cly(int
y) struct ac;
queueq;
map< pii,bool >vis;
ac cl0(int
x,int
y,int t);
for (; ix].size(); i++)
else;
return (ac);
}
}return (ac);
}ac cl1(int
x,int
y,int t);
for (; i>=0; i--)
else;
return (ac);
}
}return (ac);
}ac cl2(int
x,int
y,int t);
for (; iy].size(); i++)
else;
return (ac);
}
}return (ac);
}ac cl3(int
x,int
y,int t);
for (; i>=0; i--)
else;
return (ac);
}
}return (ac);
}void solve(int
x,int
y));
int t;
for (; !q.empty();)
for (i=1; i<=m; i++)
if(ans[i])printf("%d ",ans[i]);
else
printf("-1 ");}}
}p100;
int main()
for (i=1; i<=m; i++)
mxx++; mxy++;
p100.solve(***,yyy);
return
0;}
其實 似乎在比賽的時候把正解敲出來了但是。
忘了離散初始座標!!!突然氣死。
不會寫…留坑待填。
20151006模擬賽總結
今天上午去一中,又考了個模擬賽。這次的題有點考思維。我感覺這個第一題難度稍微大了點。一般noip第一題要麼是簡單的模擬,要麼是裸的簡單演算法,這次的第一題要自己構造演算法,並且還是列舉和貪心套在一起。我開始想的是列舉 揹包,複雜度為n 3,但是資料範圍沒給出三次方的分。於是我就覺得不靠譜。然後發現列...
20151031模擬賽總結
今天去一中,考了個模擬賽,真是坑。本來在八中食堂愉快的享受我的早飯 週末早上的番茄雞蛋燙飯 韭菜肉餅簡直爽!然後geng4512就跑過來說要去一中考試,然後兩口喝完燙飯就和他一起狂跑過去了。這次第一題組合數取模,模的不是質數。想了好大半天,沒什麼想法,然後看了下後面的題,又回來做這道題,想起了階乘分...
20160521模擬賽總結
20160521模擬賽是程式設計實習課程安排的第一次模擬賽 比賽鏈結 備註 這個系列模擬賽屬於程式設計實習練習賽,題目有很大一部分事先練習過,做這些題目為了練習碼 熟練度,也為了進行模擬考試練習的機會,所以這個系列模擬賽我每一次都參加,作為練習 題目清單見下 已解決 01 浮點數求高精度冪 已解決 ...