由於矩形邊界是算的,所以我們離散化的時候需要加點,用來表示相鄰兩個左邊之間的區間,1是x=1,3是x=2,2就是numx[x=2]-numx[x=1],點是沒有長度的,區間是有長度的。
我們用差分來統計離散化後每個點被多少矩形所覆蓋了,就能知道這個地方的速度,那麼這裡如果是個區間,那麼時間就是區間長度/速度,否則時間就是0
然後建圖,跑dijkstra。
#include#define maxl 1010
using namespace std;
const long long inf=1ll<<62;
const double eps=1e-8;
int n,m,cas,cnt,cntx,cnty,totx,toty,numcnt;
int xa,ya,xb,yb;
struct rec
a[maxl];
int ehead[maxl*maxl];
struct ed
e[maxl*maxl*8];
int numx[maxl],numy[maxl];
int num[maxl][maxl];
int sum[maxl][maxl];
double ans;
double dis[maxl*maxl];
char s[maxl];
int tx[5]=;
int ty[5]=;
typedef pairp;
priority_queue,greater>q;
bool in[maxl*maxl];
inline void add(int u,int v,double l)
inline void prework()
scanf("%d%d%d%d",&xa,&ya,&xb,&yb);
numx[++cntx]=xa;numx[++cntx]=xb;
numy[++cnty]=ya;numy[++cnty]=yb;
sort(numx+1,numx+1+cntx);
totx=unique(numx+1,numx+1+cntx)-numx-1;
sort(numy+1,numy+1+cnty);
toty=unique(numy+1,numy+1+cnty)-numy-1;
numcnt=0;
for(int i=1;i<=2*totx;i++)
for(int j=1;j<=2*toty;j++)
int id;
for(int i=1;i<=n;i++) }
id=lower_bound(numx+1,numx+1+totx,xa)-numx;
xa=id*2-1;
id=lower_bound(numx+1,numx+1+totx,xb)-numx;
xb=id*2-1;
id=lower_bound(numy+1,numy+1+toty,ya)-numy;
ya=id*2-1;
id=lower_bound(numy+1,numy+1+toty,yb)-numy;
yb=id*2-1;
for(int i=1;i<=2*totx;i++)
for(int j=1;j<=2*toty;j++)
sum[i][j]=sum[i][j]+sum[i][j-1];
int x,y;
double len,v;
cnt=0;
for(int i=1;i<=2*totx;i+=2)
for(int j=1;j<=2*toty;j+=2)
for(int k=1;k<=4;k++)
}} return dis[en];
}inline void mainwork()
ans=dij(num[xa][ya],num[xb][yb]);
}inline void print()
int main()
return 0;
}
百度之星 2019 決賽遊記
咕咕咕。先是簡單的開幕式,郭老又來了。今年的比賽題目是給你乙個神經網路的計算圖,所有計算節點都跑在乙個裝置上,1併發 所有通訊節點都跑在另乙個裝置上,3併發,要求給乙個拓撲序,使得執行完的時間盡量短。今年提供自定義測試,終於不會像去年那樣第一輪爆零直接跑路了。先隨便求了個類似最長路的東西然後直接按照...
百度之星Valley Numer
problem description 眾所周知,度度熊非常喜歡數字。它最近發明了一種新的數字 valley number,像山谷一樣的數字。當乙個數字,從左到右依次看過去數字沒有出現先遞增接著遞減的 山峰 現象,就被稱作 valley number。它可以遞增,也可以遞減,還可以先遞減再遞增。在遞...
2018 百度之星
資格賽 problem a problem b problem c problem d problem e problem f 初賽 a problem a 簽到題problem b 用deque雙端佇列模擬即可。插入的時候用insert。problem c problem d problem e ...