QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#292311#6302. MapQwertyPiAC ✓2ms4040kbC++172.3kb2023-12-27 22:54:162023-12-27 22:54:16

Judging History

你现在查看的是最新测评结果

  • [2023-12-27 22:54:16]
  • 评测
  • 测评结果:AC
  • 用时:2ms
  • 内存:4040kb
  • [2023-12-27 22:54:16]
  • 提交

answer

#include <bits/stdc++.h>

#define int long long
#define all(a) (a).begin(), (a).end()
#define sz(a) (int) (a).size()
#define forn(i, n) for(int i = 0; i < (n); i++)

using namespace std;

typedef long double LD;
typedef complex<LD> C;

ostream& operator<< (ostream& out, C z){
    return out << "(" << z.real() << ", " << z.imag() << ")";
}

LD eps = 1e-9;
int sgn(LD x){
    if(fabs(x) < eps) return 0;
    return x > 0 ? 1 : -1;
}

C reflect(C A, C B, C P){
    C Q = (P - A) / (B - A);
    Q.imag(-Q.imag());
    return A + Q * (B - A);
}

C calc_center(C a1, C a2, C a3, C b1, C b2, C b3){
    if(sgn(norm(a1 + b2 - a2 - b1))){
        return (a1 * b2 - b1 * a2) / (a1 + b2 - b1 - a2);
    }else if(sgn(norm(a1 + b3 - b1 - a3))){
        return (a1 * b3 - b1 * a3) / (a1 + b3 - b1 - a3);
    }else{
        return C(0, 0);
    }
}

void solve(int tc, bool hidden){
    vector<C> P, Q;
    for(int i = 0; i < 10; i++){
        int x, y; cin >> x >> y;
        P.push_back(C(x, y));
    }

    int dir_A = sgn(((P[2] - P[1]) / (P[1] - P[0])).imag());
    int dir_B = sgn(((P[6] - P[5]) / (P[5] - P[4])).imag());

    bool same_dir = dir_A == dir_B;

    if (!same_dir) {
        swap(P[4], P[5]); swap(P[6], P[7]);
    }

    C z = calc_center(P[0], P[1], P[2], P[4], P[5], P[6]);
    vector<C> R;
    for(int i = 0; i < 4; i++){
        R.push_back((P[i + 4] - z) / (P[i] - z));
    }
    C r = sgn(norm(P[0] - z)) ? R[0] : R[1];
    auto f = [&] (C p) {
        C q = z + r * (p - z);
        if (!same_dir) {
            q = reflect((P[4] + P[5]) * C(0.5, 0), (P[6] + P[7]) * C(0.5, 0), q);
        }
        return q;
    };
    int k, n; cin >> k >> n;
    LD ans = 1LL << 60;
    vector<C> ma, mb;
    forn(i, n + 1) ma.push_back(P[8]), P[8] = f(P[8]);
    forn(i, n + 1) mb.push_back(P[9]), P[9] = f(P[9]);
    for(int L = 0; L <= n; L++){
        for(int R = 0; R <= n - L; R++){
            C a = ma[L], b = mb[R];
            ans = min(ans, sqrtl(norm(a - b)) + (L + R) * k);
        }
    }
    if(!hidden) cout << ans << '\n';
}

int32_t main(){
    cin.tie(0); cout.tie(0)->sync_with_stdio(false);
    cout << setprecision(15) << fixed;
    int t = 1;
    cin >> t;
    for(int tc = 1; tc <= t; tc++){
        solve(tc, false);
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3792kb

input:

2
0 0 0 2 4 2 4 0
0 0 0 1 2 1 2 0
2 1 4 2
1 1
0 0 0 3 6 3 6 0
0 1 1 0 3 2 2 3
0 0 4 2
0 3

output:

1.000000000000000
1.227262335243029

result:

ok 2 numbers

Test #2:

score: 0
Accepted
time: 1ms
memory: 3844kb

input:

100
-133 -128 -109 -134 -85 -38 -109 -32
-95 -37 -100 -35 -108 -55 -103 -57
-119 -130 -112 -44
2 73
5 -100 5 -8 1 -8 1 -100
1 -60 1 -14 3 -14 3 -60
3 -84 1 -20
2 53
-58 -78 -66 -78 -66 -34 -58 -34
-58 -34 -66 -34 -66 -78 -58 -78
-63 -50 -63 -37
4 54
52 -148 116 -148 116 -52 52 -52
53 -103 53 -71 101...

output:

9.500657499741558
12.229731078922158
13.000000000000000
17.488532900375079
13.341664064126334
7.615773105863908
23.409399821439250
7.280109889280518
21.280037734083885
59.776022092579124
4.123105625617661
79.649231006959508
65.069193939989759
14.142135623730950
41.824615503479754
16.056245184896988
...

result:

ok 100 numbers

Test #3:

score: 0
Accepted
time: 2ms
memory: 3800kb

input:

100
-173 -113 -120 -113 -120 -115 -173 -115
-173 -115 -120 -115 -120 -113 -173 -113
-162 -114 -152 -114
99 57
6 23 -75 4 -56 -77 25 -58
0 -58 -51 -69 -62 -18 -11 -7
-22 -56 -42 -25
19 27
-98 -115 -150 -147 -158 -134 -106 -102
-150 -147 -98 -115 -106 -102 -158 -134
-103 -111 -136 -134
25 50
136 -92 1...

output:

10.000000000000000
25.483637975584368
40.224370722237533
18.384776310850236
9.219544457292887
18.027756377319946
43.114063026280356
52.887044352349006
45.541190146942800
55.000999975001250
37.000000000000000
12.041594578792295
24.331050121192879
18.110770276274833
7.563262753279504
2.236067977499790...

result:

ok 100 numbers

Test #4:

score: 0
Accepted
time: 1ms
memory: 3840kb

input:

100
-12 -206 72 -188 135 -482 51 -500
19 -301 23 -301 23 -315 19 -315
88 -368 28 -248
14 87
-221 -566 -467 -566 -467 -565 -221 -565
-221 -566 -467 -566 -467 -565 -221 -565
-297 -566 -289 -566
274 18
-264 759 -339 609 -129 504 -54 654
-208 580 -208 655 -103 655 -103 580
-196 664 -211 596
8 64
-111 -3...

output:

34.246950475544243
8.000000000000000
45.926952286842947
135.118466539551876
131.973482184869245
40.349665953953499
15.321347728712508
77.772275035020517
66.738813035899371
8.000266654815868
116.806446031673097
12.588290015615974
170.785630266285701
131.962750429094417
8.738089975160307
17.4642491965...

result:

ok 100 numbers

Test #5:

score: 0
Accepted
time: 0ms
memory: 3776kb

input:

100
-235 -704 133 -704 133 -720 -235 -720
-224 -712 -40 -712 -40 -704 -224 -704
15 -711 76 -718
4 74
-467 574 -475 596 -123 724 -115 702
-274 662 -270 652 -430 588 -434 598
-458 588 -241 657
15 31
380 -3 532 -343 787 -229 635 111
503 -71 639 -163 708 -61 572 31
533 -189 613 -137
3 58
-460 -7 -488 -7...

output:

31.350081433008751
51.967632320937980
21.468697928146776
38.837932076467767
84.248187428308027
77.929455278476058
47.000000000000000
74.115493725912497
86.467104880421689
35.114099732158875
3.605551275463989
97.416631023660431
24.606056965764579
56.773359432723913
6.998534619414935
13.45362404707371...

result:

ok 100 numbers

Test #6:

score: 0
Accepted
time: 1ms
memory: 3804kb

input:

100
-1201 2822 -1197 2814 -3437 1694 -3441 1702
-3119 1860 -3117 1856 -1997 2416 -1999 2420
-1419 2709 -2491 2174
48 76
-2515 285 -2547 306 -1308 2194 -1276 2173
-2255 683 -2260 686 -2083 981 -2078 978
-1572 1753 -1392 2015
121 28
-1216 1209 -1498 -1141 -1598 -1129 -1316 1221
-1494 -823 -1494 -447 -...

output:

264.055863532879047
290.425700450936407
258.282400313066252
743.737184763542665
341.052781838823300
400.566683662432774
172.040799340956913
27.770894609837871
294.825880152081154
508.065910688872964
501.781825099315449
666.805068966935793
180.069431053691065
193.610433603150634
1507.002986062071478
...

result:

ok 100 numbers

Test #7:

score: 0
Accepted
time: 1ms
memory: 3800kb

input:

100
1411 -2755 603 -3563 623 -3583 1431 -2775
716 -3477 1120 -3073 1110 -3063 706 -3467
1210 -2959 1339 -2830
2319 39
4528 -3417 4286 -4055 1908 -3153 2150 -2515
2094 -2892 2094 -3090 2832 -3090 2832 -2892
2257 -2993 4389 -3736
17 22
-180 -1673 -2172 -3665 -2164 -3673 -172 -1681
-284 -1792 -2027 -35...

output:

182.433549546129261
96.880923053928569
530.330085889910643
44.011362169330774
64.313365366181941
7.392893666126124
34.567810207462374
148.850160742992533
350.338135916148604
329.225162779821197
68.864765108872990
32.824383174612819
244.695729427384981
685.968837711980812
141.362747995939058
1601.789...

result:

ok 100 numbers

Test #8:

score: 0
Accepted
time: 2ms
memory: 3824kb

input:

100
11928 -18111 8928 -17411 11056 -8291 14056 -8991
11043 -10811 10793 -10111 12921 -9351 13171 -10051
10491 -14092 11923 -12413
10 92
11869 -4371 3539 5429 1299 3525 9629 -6275
8302 -3064 3647 2571 4935 3635 9590 -2000
2384 2680 3466 2644
181 91
4001 -10187 4001 -10897 9 -10897 9 -10187
838 -10629...

output:

87.479657002630678
977.209322820567370
94.486325059360631
307.006514588860150
1245.629559700635878
532.000000000000000
369.048777263927539
19.554024317232545
1509.000000000000000
275.094267211329336
4242.193351514708150
465.656251408810374
3478.304242060182535
1754.356007200362967
1804.4669275859330...

result:

ok 100 numbers

Test #9:

score: 0
Accepted
time: 1ms
memory: 4040kb

input:

100
10303 -4099 19487 -8131 19703 -7639 10519 -3607
18394 -7495 18842 -7271 18854 -7295 18406 -7519
15852 -6248 15950 -6389
38 10
13132 -3411 17416 3393 15634 4515 11350 -2289
13143 -873 15411 3411 16533 2817 14265 -1467
16515 2577 16017 1561
198 94
-5480 10872 -6297 11294 -11361 1490 -10544 1068
-1...

output:

84.574886489291820
999.689277678129567
6231.529667746114486
550.947886095034877
182.544124658606005
5374.296791209060125
825.725781096656444
1653.207429169171740
2777.109648537486177
166.653023806101158
1747.004579272761952
651.111357603290468
242.210006732268284
34.266895846221599
286.7908645685911...

result:

ok 100 numbers

Test #10:

score: 0
Accepted
time: 1ms
memory: 3808kb

input:

100
0 -30 84 12 126 -72 42 -114
0 -30 84 12 126 -72 42 -114
91 -41 100 -55
96 93
168 110 148 150 48 100 68 60
48 100 68 60 168 110 148 150
61 96 102 90
8 2
-123 129 -60 174 -15 111 -78 66
-15 111 -78 66 -123 129 -60 174
-44 115 -104 132
27 3
27 42 15 54 -75 -36 -63 -48
-63 -48 -75 -36 15 54 27 42
-4...

output:

16.643316977093238
41.436698710201323
39.206555615733703
11.180339887498948
49.729267036625424
26.925824035672520
50.931326312987373
10.294055820165389
117.885537705012823
8.602325267042627
48.466483264210536
21.095023109728986
24.038404810405297
16.000000000000000
48.548944375753424
26.061756859551...

result:

ok 100 numbers

Test #11:

score: 0
Accepted
time: 1ms
memory: 3840kb

input:

100
9725 6731 9725 11971 14965 11971 14965 6731
9725 6731 9725 11971 14965 11971 14965 6731
10293 11185 10445 9833
488 10
3833 -4831 6913 -4271 8443 -12686 5363 -13246
6913 -4271 3833 -4831 5363 -13246 8443 -12686
5209 -4960 7133 -6409
1 88
-5891 -6066 -8365 -6066 -8365 -8540 -5891 -8540
-8365 -6066...

output:

1360.517548582156290
2119.674780139698552
1638.601494195408552
144.699689011414257
1706.299211744528703
2671.668018298680761
1442.324859385013859
2909.931270666027260
5311.386353862802927
7894.844203655953083
2950.721437208195700
1405.197279587166840
8052.785977535973233
436.084854128184553
1910.190...

result:

ok 100 numbers

Test #12:

score: 0
Accepted
time: 1ms
memory: 4036kb

input:

100
1432065 -1359744 1432065 -1359796 610089 -1359796 610089 -1359744
610089 -1359744 610089 -1359796 1432065 -1359796 1432065 -1359744
1413145 -1359747 670086 -1359765
306 12
-630899 -570942 344981 -570942 344981 -567164 -630899 -567164
-630899 -567164 344981 -567164 344981 -570942 -630899 -570942
...

output:

41383.003943812649979
344430.708764477038756
597464.947160122257458
57512.000021251275065
180112.504983949339092
254594.189465463647110
13301.834367630940076
246235.741341503873883
17086.953736696310257
168329.001188149393712
580568.278437601170310
120047.475965045275309
24722.575937794184476
252882...

result:

ok 100 numbers

Test #13:

score: 0
Accepted
time: 2ms
memory: 3804kb

input:

100
-240497 1168822 -365542 931192 504344 473443 629389 711073
226221 683190 167481 688085 185400 903113 244140 898218
-192129 1110656 34450 941656
2 25
1729381 25950 1512625 519672 1528369 526584 1745125 32862
1536820 492965 1580974 388601 1584302 390009 1540148 494373
1660204 207517 1601591 344571...

output:

33.523773639151417
126504.999518608850813
57518.293697332946479
318943.663702541675065
169769.250005668789626
1497.133893067348670
23459.324991965074680
853.347816095362520
28.351411845903830
7526.106524036450715
36705.816569039844751
575.015321675223517
4025.084882224932999
31458.023666467033797
31...

result:

ok 100 numbers

Test #14:

score: 0
Accepted
time: 1ms
memory: 3968kb

input:

100
-889209 606569 -191736 1436894 638589 739421 -58884 -90904
-58884 -90904 638589 739421 -191736 1436894 -889209 606569
-486300 891465 -464854 988546
79 18
-1226546 957048 -712144 1926170 -590407 1861553 -1104809 892431
-712144 1926170 -1226546 957048 -1104809 892431 -590407 1861553
-807239 146415...

output:

99421.584562910683879
404181.388824374247690
311311.528917577994662
271785.624537060458550
319158.191839094112879
77725.025543495047884
103690.241569289944856
33781.004277552199500
16708.608350188833127
262422.768227149071066
176381.843093329762382
159818.483940375307270
451836.634220813617361
29166...

result:

ok 100 numbers