結果

問題 No.3559 +A,-B
コンテスト
ユーザー iomir
提出日時 2026-05-29 20:24:48
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 2,512 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,982 ms
コンパイル使用メモリ 337,748 KB
実行使用メモリ 7,976 KB
最終ジャッジ日時 2026-05-29 20:24:56
合計ジャッジ時間 8,432 ms
ジャッジサーバーID
(参考情報)
judge4_1 / judge2_1
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点1 10 % AC * 4
部分点2 60 % WA * 7
部分点3 30 % AC * 4 WA * 16
合計 10 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
//#include <atcoder/all>
using namespace std;
//using namespace atcoder;

#define all(v) v.begin(),v.end()
using ll = long long;
using ull = unsigned long long;
using lll = __int128;
using vll=vector<ll>;
using vvll = vector<vector<ll>>;
using P = pair<ll,ll>;
using vp=vector<pair<ll, ll>>;
//using mint=modint1000000007;
//using mint=modint998244353;

const ll INF=1ll<<60;
ll mod10=1e9+7;
ll mod99=998244353;
const double PI = acos(-1);

#define rep(i,n) for (ll i=0;i<n;++i)
#define per(i,n) for(ll i=(n)-1;i>=0;--i)
#define rep2(i,a,n) for (ll i=a;i<n;++i)
#define per2(i,a,n) for (ll i=a;i>=n;--i)

template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }

bool solve(){
	ll N,x,y,a,b;cin>>N>>x>>y>>a>>b;

	ll sum=x+y;
	if(a<=0){
		if(sum<0){
			cout << x+a*N<<" "<<y << endl;
			return 0;
		}else{
			if(b<=0){
				cout << x<<" "<<y-N*b << endl;
				return 0;
			}else{
				ll c=sum/b+1;
				if(c>=N){
					cout << x<<" "<<y-N*b << endl;
					return 0;
				}
				N-=c;
				y-=b*c;
				sum=x+y;
				cout << x+a*N<<" "<<y << endl;
				return 0;
			}
		}
	}

	if(b<=0){
		if(sum<=0){
			ll c=(-sum)/a+((-sum)%a>0);
			if(c>=N){
				cout << x+a*N<<" "<<y << endl;
				return 0;
			}
			N-=c;
			x+=a*c;
			sum=x+y;
		}
		cout<<x<<" "<<y-b*N<<endl;
		return 0;
	}

	auto f=[&](ll& x,ll& y) -> void {
		if(x+y<0) x+=a;
		else y-=b;
	};
	rep(i,min(N,10ll)) f(x,y);
	cout << x<<" "<<y << endl;
	return 0;



	// a>0&&b>0
	
	if(sum<0){
		ll c=(-sum)/a;
		if(c>=N){
			cout << x+a*N<<" "<<y << endl;
			return 0;
		}
		N-=c;
		x+=a*c;
		sum=x+y;
		if(sum<0){
			x+=a;
			sum=x+y;
		}
	}
	if(sum>=0){
		ll c=sum/b+1;
		if(c>=N){
			cout << x<<" "<<y-N*b << endl;
			return 0;
		}
		N-=c;
		y-=b*c;
		sum=x+y;
	}
	cerr<<N<<" "<<INF<<endl;
	cout << x<<" "<<y << endl;
	
	if(a==b){
		ll c1=(N+1)/2,c2=N/2;
		cout<<x+a*c1<<" "<<y-b*c2<<endl;
		return 0;
	}
	if(a>=b){
		if(a%b==0){
			ll k=a/b;
			ll c1=N/(k+1)+(N%(k+1));ll c2=N-c1;
			cout<<x+a*c1<<" "<<y-b*c2<<endl;
			return 0;
		}else{
			ll k=a%b;//増加
			ll c=(a-b)/b;//戻ってくるまで
			ll f=b/k*(c+1)+c+2;//1->c->1->c->1->c+1の合計

			ll al=b+(a%b)*(c+1)+(b-a%b)*c;
			if(N>=al){
				ll n=N%al;
				ll c1=b;ll c2=al-b;
				x+=c1*a*n,y-=c2*b*n;
				N%=al;
			}
			ll c1=N/f;
		}
	}
	return 0;
}


int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	ll T=1;cin>>T;
	rep(i,T) solve();
}
	
0