NC257433. 游游的正整数
描述
输入描述
共有组询问。
每组询问输入四个正整数。
输出描述
对于每组询问,输出一行答案。
如果无论如何都不能让等于,则输出-1。
否则输出两个整数,分别代表最少操作次数和最多操作次数。
示例1
输入:
3 1 6 2 5 1 4 2 2 2 10 2 6
输出:
1 2 -1 2 4
说明:
第一组询问,操作一次的方案:直接使加5。操作2次的方案:先加2再加3。C++(g++ 7.5.0) 解法, 执行用时: 47ms, 内存消耗: 508K, 提交时间: 2023-08-13 21:16:45
#include<bits/stdc++.h> #define ll long long using namespace std; ll a,b,l,r,t,q; int main(){ cin>>t; while(t--){ cin>>a>>b>>l>>r; q=(b-a)/l; if(r*q<(b-a)) cout<<-1<<'\n'; else cout<<(b-a-1+r)/r<<" "<<(b-a)/l<<"\n"; } return 0; }
Python3 解法, 执行用时: 219ms, 内存消耗: 4696K, 提交时间: 2023-08-13 23:02:13
import math T = int(input()) for _ in range(T): a, b, l, r = map(int,input().split()) num = b-a min_num = math.ceil(num/r) max_num = math.floor(num/l) if min_num > max_num: print(-1) else: print(min_num,max_num)
C++(clang++ 11.0.1) 解法, 执行用时: 47ms, 内存消耗: 568K, 提交时间: 2023-08-14 09:49:50
#include<bits/stdc++.h> using namespace std; int main() { long long t,a,b,l,r,c; cin>>t; while(t--) { cin>>a>>b>>l>>r; c=b-a; if(c/l*(r-l)<c%l)cout<<-1<<endl; else cout<<(c+r-1)/r<<' '<<c/l<<endl; } }
pypy3 解法, 执行用时: 163ms, 内存消耗: 26984K, 提交时间: 2023-08-13 20:33:52
import sys input = sys.stdin.readline for _ in range(int(input())): a, b, l, r = map(int, input().split()) diff = b - a mn, mx = (diff + r - 1) // r, diff // l if mx < mn: print(-1) else: print(mn, mx)