結果
| 問題 | No.3559 +A,-B |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-29 21:52:54 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,703 bytes |
| 記録 | |
| コンパイル時間 | 1,346 ms |
| コンパイル使用メモリ | 212,900 KB |
| 実行使用メモリ | 7,976 KB |
| 最終ジャッジ日時 | 2026-05-29 21:53:01 |
| 合計ジャッジ時間 | 6,317 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_1 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 10 % | AC * 2 WA * 2 |
| 部分点2 | 60 % | WA * 7 |
| 部分点3 | 30 % | AC * 2 WA * 18 |
| 合計 | 0 点 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
while(T--){
long long N,X,Y,A,B; cin >> N >> X >> Y >> A >> B;
bool end = false;
auto f = [&]() -> pair<long long,long long> {
if(X+Y >= 0){
end = B<=0;
return {X,Y-B};
}
else{
end = A<=0;
return {X+A,Y};
}
};
auto ans = [&]() -> void {cout << X << " " << Y << "\n";};
tie(X,Y) = f(),N--;
if(end || N == 0){
if(X+Y >= 0) Y -= B*N;
else X += A*N;
ans(); continue;
}
if(X+Y >= 0){
long long ope = (X+Y+1+B-1)/B;
ope = min(ope,N);
Y -= B*ope,N -= ope;
}
else{
long long ope = (-(X+Y)+A-1)/A;
ope = min(ope,N);
X += A*ope,N -= ope;
}
if(N == 0){ans(); continue;}
tie(X,Y) = f(),N--;
if(end || N == 0){
if(X+Y >= 0) Y -= B*N;
else X += A*N;
ans(); continue;
}
long long g = gcd(abs(A),abs(B)),lcm = abs(A*B)/g,cycle = lcm/A+lcm/B;
long long loop = N/cycle;
X += lcm*loop,Y -= lcm*loop;
N %= cycle;
long long low = -1,high = N+1;
while(high-low > 1){
long long mid = (high+low)/2;
long long dec = mid,add = N-mid;
long long now = X+Y+add*A-dec*B;
if(X+Y >= A) low = mid;
else high = mid;
}
Y -= high*B,X += (N-high)*A;
ans();
}
}