結果
問題 | No.2376 障害物競プロ |
ユーザー | i_am_noob |
提出日時 | 2023-07-07 21:57:36 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 582 ms / 4,000 ms |
コード長 | 2,828 bytes |
コンパイル時間 | 2,136 ms |
コンパイル使用メモリ | 205,848 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-21 17:54:17 |
合計ジャッジ時間 | 63,150 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,944 KB |
testcase_03 | AC | 1 ms
6,940 KB |
testcase_04 | AC | 246 ms
6,940 KB |
testcase_05 | AC | 348 ms
6,944 KB |
testcase_06 | AC | 144 ms
6,944 KB |
testcase_07 | AC | 407 ms
6,940 KB |
testcase_08 | AC | 406 ms
6,940 KB |
testcase_09 | AC | 390 ms
6,944 KB |
testcase_10 | AC | 390 ms
6,944 KB |
testcase_11 | AC | 322 ms
6,944 KB |
testcase_12 | AC | 287 ms
6,944 KB |
testcase_13 | AC | 410 ms
6,944 KB |
testcase_14 | AC | 401 ms
6,940 KB |
testcase_15 | AC | 378 ms
6,944 KB |
testcase_16 | AC | 392 ms
6,944 KB |
testcase_17 | AC | 300 ms
6,944 KB |
testcase_18 | AC | 270 ms
6,944 KB |
testcase_19 | AC | 545 ms
6,944 KB |
testcase_20 | AC | 562 ms
6,944 KB |
testcase_21 | AC | 560 ms
6,940 KB |
testcase_22 | AC | 335 ms
6,948 KB |
testcase_23 | AC | 226 ms
6,944 KB |
testcase_24 | AC | 260 ms
6,944 KB |
testcase_25 | AC | 128 ms
6,944 KB |
testcase_26 | AC | 295 ms
6,944 KB |
testcase_27 | AC | 244 ms
6,944 KB |
testcase_28 | AC | 137 ms
6,944 KB |
testcase_29 | AC | 127 ms
6,944 KB |
testcase_30 | AC | 119 ms
6,940 KB |
testcase_31 | AC | 149 ms
6,944 KB |
testcase_32 | AC | 20 ms
6,944 KB |
testcase_33 | AC | 54 ms
6,944 KB |
testcase_34 | AC | 73 ms
6,940 KB |
testcase_35 | AC | 50 ms
6,940 KB |
testcase_36 | AC | 234 ms
6,944 KB |
testcase_37 | AC | 320 ms
6,940 KB |
testcase_38 | AC | 116 ms
6,944 KB |
testcase_39 | AC | 308 ms
6,944 KB |
testcase_40 | AC | 85 ms
6,944 KB |
testcase_41 | AC | 114 ms
6,940 KB |
testcase_42 | AC | 582 ms
6,948 KB |
testcase_43 | AC | 580 ms
6,940 KB |
ソースコード
#include<bits/stdc++.h> using namespace std; using ll=long long; using pii=pair<int,int>; #define all(a) a.begin(),a.end() #define pb push_back #define sz(a) ((int)a.size()) const int N=305,mod=998244353; int add(int x, int y){x+=y; if(x>=mod) x-=mod; return x;} int sub(int x, int y){x-=y; if(x<0) x+=mod; return x;} int mul(int x, int y){return ((ll)x)*y%mod;} int Pow(int x, ll y=mod-2){int res=1; for(; y; x=mul(x,x),y>>=1) if(y&1) res=mul(res,x); return res;} const double eps = 1e-8, pi = acos(-1); int sign(double x) {return abs(x) <= eps ? 0 : (x > 0 ? 1 : -1);} struct Pt{ ll x,y; constexpr Pt(ll _x=0, ll _y=0):x(_x),y(_y){} Pt operator + (Pt o) {return Pt(x + o.x, y + o.y);} Pt operator - (Pt o) {return Pt(x - o.x, y - o.y);} Pt operator * (ll k) {return Pt(x * k, y * k);} Pt operator / (ll k) {return Pt (x / k, y / k);} ll operator * (Pt o) {return x * o.x + y * o.y;} ll operator ^ (Pt o) {return x * o.y - y * o.x;} }; struct Line { Pt a, b; }; int ori(Pt o, Pt a, Pt b) {return sign((o - a) ^ (o - b));} bool btw(Pt a, Pt b, Pt c) { // c on segment ab? return ori(a, b, c) == 0 && sign((c - a) * (c - b)) <= 0; } bool SegsInter(Line a, Line b) { if (btw(a.a, a.b, b.a)) return 1; if (btw(a.a, a.b, b.b)) return 1; if (btw(b.a, b.b, a.a)) return 1; if (btw(b.a, b.b, a.b)) return 1; if (ori(a.a, a.b, b.a) * ori(a.a, a.b, b.b) == -1 && ori(b.a, b.b, a.a) * ori(b.a, b.b, a.b) == -1) return 1; return 0; } int n,m; double dis[N][N]; Line a[N]; bool good(Line l, int x, int y){ for(int i=0; i<n; ++i) if(i!=x&&i!=y&&SegsInter(l,a[i])) return 0; return 1; } signed main(){ ios_base::sync_with_stdio(0),cin.tie(0); cout << fixed << setprecision(20); cin >> n >> m; for(int i=0; i<n; ++i) cin >> a[i].a.x >> a[i].a.y >> a[i].b.x >> a[i].b.y; for(int i=0; i<n*2; ++i) for(int j=0; j<n*2; ++j) dis[i][j]=i==j?0:1e49; for(int i=0; i<n; ++i){ bool ok=1; for(int j=0; j<n; ++j) if(i!=j&&SegsInter(a[i],a[j])) ok=0; if(ok) dis[i*2][i*2+1]=dis[i*2+1][i*2]=sqrt((a[i].b-a[i].a)*(a[i].b-a[i].a)); } for(int i=0; i<n; ++i) for(int j=0; j<n; ++j) if(i!=j){ Pt de1[2]={a[i].a,a[i].b}; Pt de2[2]={a[j].a,a[j].b}; for(int ii: {0,1}) for(int jj: {0,1}) if(good({de1[ii],de2[jj]},i,j)) dis[i*2+ii][j*2+jj]=dis[j*2+jj][i*2+ii]=sqrt((de2[jj]-de1[ii])*(de2[jj]-de1[ii])); } //for(int i=0; i<n*2; ++i) for(int j=0; j<n*2; ++j) if(dis[i][j]<1e25) cout << i << ' ' << j << ' ' << dis[i][j] << endl; for(int k=0; k<n*2; ++k) for(int i=0; i<n*2; ++i) for(int j=0; j<n*2; ++j) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); while(m--){ int a1,b1,a2,b2; cin >> a1 >> b1 >> a2 >> b2; a1--,b1--,a2--,b2--; cout << dis[a1*2+b1][a2*2+b2] << "\n"; } }