ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#215174 | #2686. Oversleeping | nodgd | 30 | 0ms | 1192kb | C++11 | 2.0kb | 2024-11-26 21:59:33 | 2024-11-26 23:07:07 |
answer
#include <bits/stdc++.h>
using namespace std;
// typedef long long i64;
int exgcd(int a, int b, int &x, int &y) {
if (!b) {
x = 1, y = 0;
return a;
} else {
int c = exgcd(b, a % b, y, x);
y -= a / b * x;
return c;
}
}
int main() {
int T;
for (scanf("%d", &T); T --; ) {
int X, Y, P, Q, A, B, a, b, c, x, y;
scanf("%d%d%d%d", &X, &Y, &P, &Q);
A = P + Q;
B = X + Y + X + Y;
// printf(" A=%d,B=%d\n", A, B);
c = exgcd(A, B, x, y);
// printf(" c=%d,x=%d,y=%d c=A*x+B*y\n", c, x, y);
a = A / c;
b = B / c;
// printf(" a=%d,b=%d\n", a, b);
y = -y;
if (x < 0 || y < 0) x += b, y += a;
// printf(" x=%d,y=%d\n", x, y);
assert(1ll * x * A - 1ll * y * B == c);
assert(x >= 0 && y >= 0);
assert(x <= b && y <= a);
int dl = X - P - Q + 1;
int dr = X + Y - P - 1;
// printf(" dl=%d, dr=%d\n", dl, dr);
if (dl >= 0) dl = (dl + c - 1) / c;
else dl = dl / c;
if (dr >= 0) dr = dr / c;
else dr = (dr - c + 1) / c;
// printf(" dl=%d, dr=%d\n", dl, dr);
long long ans = LONG_LONG_MAX;
for (int d = dl; d <= dr; d ++) {
assert(d * c > X - P - Q);
assert(d * c < X + Y - P);
int k = d * x % b;
if (k < 0) k += b;
int m = d * y % a;
if (m < 0) m += a;
// printf(" d=%d, k=%d, m=%d\n", d, k, m);
assert(1ll * k * A - 1ll * m * B == d * c);
long long t = 1ll * k * A;
if (X - P <= c * d) t = t + P;
else t = t + X - c * d;
// printf(" c*d=%d, X-P=%d t=%lld\n", c * d, X - P, t);
assert(t >= 0);
ans = min(ans, t);
}
if (ans == LONG_LONG_MAX) ans = -1;
printf("%lld\n", ans);
}
return 0;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 5
Accepted
time: 0ms
memory: 1188kb
input:
10 42 337 468 315 179 261 297 332 336 189 230 33 240 398 38 204 465 158 454 462 112 184 90 263 320 4...
output:
1558 297 493 240 465 112 475 187 386 268
result:
ok 10 lines
Test #2:
score: 5
Accepted
time: 0ms
memory: 1192kb
input:
10 96 471 276 491 226 87 207 365 451 201 191 173 46 375 100 8 39 179 214 269 135 260 91 431 253 288 ...
output:
276 226 555 100 214 135 458 374 378 99
result:
ok 10 lines
Test #3:
score: 5
Accepted
time: 0ms
memory: 1192kb
input:
10 337 285 340 338 484 25 321 156 246 482 122 234 229 441 426 72 6 93 155 338 21 317 406 335 160 298...
output:
340 5574 246 426 204 697 372 469 437 492
result:
ok 10 lines
Test #4:
score: 5
Accepted
time: 0ms
memory: 1192kb
input:
10 196 433 313 366 262 415 94 30 353 22 242 460 283 172 13 276 56 247 344 4 297 363 415 479 473 26 6...
output:
313 342 353 283 692 415 473 169 131 176
result:
ok 10 lines
Test #5:
score: 5
Accepted
time: 0ms
memory: 1188kb
input:
10 437 267 140 198 383 155 226 424 273 308 151 317 15 231 435 285 404 294 253 64 109 199 388 147 425...
output:
478 383 273 507 570 923 427 467 328 123
result:
ok 10 lines
Test #6:
score: 5
Accepted
time: 0ms
memory: 1192kb
input:
10 21 426 135 234 111 51 109 11 185 42 230 22 472 346 269 285 77 128 499 461 173 79 230 382 102 127 ...
output:
135 111 2001 472 499 230 207 297 268 141
result:
ok 10 lines
Test #7:
score: 0
Dangerous Syscalls
input:
10 790950658 153 395731486 328 228237805 89 805489534 371 733742769 407 150980036 116 210282811 256 ...
output:
result:
Test #8:
score: 0
Dangerous Syscalls
input:
10 935151576 163 823994136 316 552819682 244 661178089 95 751586616 375 326537181 182 9424664 344 31...
output:
result:
Test #9:
score: 0
Dangerous Syscalls
input:
10 480628854 293 138727635 133 188840646 190 569211831 53 442713615 341 668626439 341 527553711 268 ...
output:
result:
Test #10:
score: 0
Dangerous Syscalls
input:
10 128375946 395 45119743 26 591869966 93 644623523 312 553967887 448 714110036 391 129391856 52 673...
output:
result:
Test #11:
score: 0
Dangerous Syscalls
input:
10 416394745 108 799849287 309 285823581 120 50495267 151 984269713 448 325585187 230 502469917 398 ...
output:
result:
Test #12:
score: 0
Dangerous Syscalls
input:
10 858503120 86 550141525 344 266071218 423 114926419 32 463189501 184 235629038 219 681438792 48 66...
output:
result:
Test #13:
score: 0
Dangerous Syscalls
input:
10 49615553 235 484012586 439 733063300 215 529603390 181 217670208 264 477723402 451 412727927 119 ...
output:
result:
Test #14:
score: 0
Dangerous Syscalls
input:
10 411060288 247 193494425 14 162692451 151 282497312 400 796796095 370 100991720 365 560074247 197 ...
output:
result:
Test #15:
score: 0
Dangerous Syscalls
input:
10 733526255 46680 232614188 25143 740109721 35101 664765419 65813 926232187 19192 248710599 18813 7...
output:
result:
Test #16:
score: 0
Dangerous Syscalls
input:
10 40397805 9224 854461643 50758 463970290 6807 993317097 75888 496579182 67022 428873070 56575 8340...
output:
result:
Test #17:
score: 0
Dangerous Syscalls
input:
10 677231818 45638 135553472 57886 334073954 74682 504512612 32658 528899984 14506 658263816 15374 1...
output:
result:
Test #18:
score: 0
Dangerous Syscalls
input:
10 591761203 22205 53945697 65976 829627579 78277 112598137 27980 144133461 55044 668263637 96424 30...
output:
result:
Test #19:
score: 0
Dangerous Syscalls
input:
10 798158737 58985 625637387 56023 950567276 86709 613154552 23440 2676550 96868 636525260 84971 205...
output:
result:
Test #20:
score: 0
Dangerous Syscalls
input:
10 76769987 47758 832950079 87350 226318103 39942 857729326 28604 700759579 85249 4088534 87174 7300...