QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#605559#8030. Traveling in the Grid Worlducup-team3519#TL 481ms3984kbC++171.7kb2024-10-02 17:57:082024-10-02 17:57:09

Judging History

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

  • [2024-10-02 17:57:09]
  • 评测
  • 测评结果:TL
  • 用时:481ms
  • 内存:3984kb
  • [2024-10-02 17:57:08]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef double db;
typedef pair<int, int> pi;

#define fi first
#define se second
#define V vector
#define pb push_back
#define all1(x) (x).begin() + 1, (x).end()
#define all0(x) (x).begin(), (x).end()

db dis2(LL x, LL y, LL a, LL b) {
    return sqrt(1LL * (x - a) * (x - a) + 1LL * (y - b) * (y - b));
}

clock_t startTime;
double getCurrentTime() {
	return (double)(clock() - startTime) / CLOCKS_PER_SEC;
}

mt19937 mrand(chrono::steady_clock().now().time_since_epoch().count());

void solve() {
    cout << fixed << setprecision(12);
    LL n, m; cin >> n >> m;
    startTime = clock();
    if(__gcd(n, m) == 1) {
        cout << dis2(0, 0, n, m) << "\n";
        return;
    }
    db ans = 1e18;
    for(LL i = 0; i <= n; i++) {
        LL base = (1LL * m * i + n - 1) / n - 1;
        LL x = base;

        while(x >= 0 && (__gcd(i, x) != 1 || __gcd(n - i, m - x) != 1)) x--;
        if(x >= 0) {
            ans = min(ans, dis2(0, 0, i, x) + dis2(i, x, n, m));
            // cout << i << " " << x << endl;
        }

        // cout << i << " " << x << endl;

        x = base + 1;
        if(1LL * x * n == 1LL * i * m) x++;
        while(x <= m && (__gcd(i, x) != 1 || __gcd(n - i, m - x) != 1)) x++;
        if(x <= m) {
            ans = min(ans, dis2(0, 0, i, x) + dis2(i, x, n, m));
            // cout << i << " " << x << endl;
        }

        // if(i % 100 == 0) cout << i << endl;
    }
    cout << ans << "\n";
    // cout << getCurrentTime() << endl;
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    int t; cin >> t;
    while(t--)
    solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

2
2 2
2 3

output:

3.236067977500
3.605551275464

result:

ok 2 numbers

Test #2:

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

input:

225
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 10
2 11
2 12
2 13
2 14
2 15
3 1
3 2
3 3
3 4
3 5
3 6
3 7
3 8
3 9
3 10
3 11
3 12
3 13
3 14
3 15
4 1
4 2
4 3
4 4
4 5
4 6
4 7
4 8
4 9
4 10
4 11
4 12
4 13
4 14
4 15
5 1
5 2
5 3
5 4
5 5
5 6
5 7
5 8
...

output:

1.414213562373
2.236067977500
3.162277660168
4.123105625618
5.099019513593
6.082762530298
7.071067811865
8.062257748299
9.055385138137
10.049875621121
11.045361017187
12.041594578792
13.038404810405
14.035668847618
15.033296378373
2.236067977500
3.236067977500
3.605551275464
4.576491222541
5.3851648...

result:

ok 225 numbers

Test #3:

score: 0
Accepted
time: 87ms
memory: 3972kb

input:

6000
119 101
13 90
96 3
20 99
42 79
57 22
78 138
42 157
179 93
195 12
24 195
62 129
31 166
128 9
46 118
123 113
99 128
187 45
154 84
24 109
143 91
96 100
146 168
115 98
176 36
99 70
198 174
119 33
130 92
184 9
56 196
6 118
136 166
150 118
178 43
105 47
36 4
132 162
171 53
37 180
11 171
77 67
199 51
...

output:

156.083311087381
90.934042030474
96.046886075716
101.000000000000
89.470665583754
61.098281481561
158.518156028175
162.520767903674
201.717624415915
195.368884346967
196.471374493754
143.125818774951
168.869772309907
128.316016147635
126.649125933847
167.026943934205
161.817798773806
192.33824372703...

result:

ok 6000 numbers

Test #4:

score: 0
Accepted
time: 481ms
memory: 3980kb

input:

1400
231 870
23 319
363 117
561 492
841 470
849 886
2 611
921 397
227 916
669 867
874 371
533 16
841 789
782 469
367 291
778 136
694 120
593 89
22 575
6 44
180 871
661 554
397 860
265 547
521 412
809 804
6 554
272 867
240 695
408 900
917 926
47 747
748 750
321 151
291 114
330 31
543 194
387 432
144 ...

output:

900.144988346140
319.828078817355
381.389564951912
746.180273168174
963.421506922074
1227.109204594277
611.003273313654
1002.920734654539
943.708111653174
1095.102734920367
949.482490623182
533.240096016794
1153.170412384917
911.857993330102
468.369512244339
789.797442405113
704.298232312002
599.641...

result:

ok 1400 numbers

Test #5:

score: -100
Time Limit Exceeded

input:

140
3868 307
1542 8425
7856 1284
8129 8657
773 3877
3073 1195
9579 2327
4058 1337
7080 2717
4183 8192
6189 9162
4094 9648
8098 864
5240 9869
6891 8861
9787 7768
321 97
3839 1384
3271 461
1031 8399
7425 278
6201 2581
2426 9301
3153 6278
3317 9760
34 6044
328 9027
9636 6166
8786 9001
9148 1501
6941 61...

output:


result: