Submission #1678877
Source Code Expand
#include<bits/stdc++.h>
#define HEAP priority_queue
#define rep(i, n) for(int i = 0, _end_ = (n); i < _end_; ++i)
#define per(i, n) for(int i = (n) - 1; i >= 0 ; --i)
#define forn(i, l, r) for(int i = (l), _end_ = (r); i <= _end_; ++i)
#define nrof(i, r, l) for(int i = (r), _end_ = (l); i >= _end_; --i)
#define FOR(a, b) for(auto (a): (b))
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define X first
#define Y second
#define eps 1e-6
#define pi 3.1415926535897932384626433832795
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(), x.end()
using namespace std;
typedef long long LL;
typedef double flt;
typedef vector<int> vi;
typedef vector<LL> vl;
typedef pair<int,int> pii;
typedef pair<int,LL> pil;
typedef pair<LL,int> pli;
typedef pair<LL,LL> pll;
typedef vector<pil> vil;
typedef vector<pii> vii;
typedef vector<pli> vli;
typedef vector<pll> vll;
const int iinf = 1e9 + 7;
const int oo = 0x3f3f3f3f;
const LL linf = 1ll << 60;
const flt dinf = 1e60;
template <typename T> inline void scf(T &x) {
bool f = 0;
x = 0;
char c = getchar();
while(c != '-' && (c < '0' || c > '9')) c = getchar();
if(c == '-') f = 1, c = getchar();
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
if(f) x = -x;
return;
}
template <typename T1, typename T2> void scf(T1 &x, T2 &y) {
scf(x);
return scf(y);
}
template <typename T1, typename T2, typename T3> void scf(T1 &x, T2 &y, T3 &z) {
scf(x);
scf(y);
return scf(z);
}
template <typename T1, typename T2, typename T3, typename T4> void scf(T1 &x, T2 &y, T3 &z, T4 &w) {
scf(x);
scf(y);
scf(z);
return scf(w);
}
inline char mygetchar() {
char c = getchar();
while(c == ' ' || c == '\n') c = getchar();
return c;
}
template <typename T> inline bool chkmax(T &x, const T &y) {
return y > x ? x = y, 1 : 0;
}
template <typename T> inline bool chkmin(T &x, const T &y) {
return y < x ? x = y, 1 : 0;
}
#ifdef King_George
#define DEBUG
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define debug(...)
#endif
//---------------------------------------------------------head----------------------------------------------------
const LL bnd = 1000000000000000000;
const int maxn = 100;
const LL mod = 1e9 + 7;
int n;
LL a[maxn];
vll all[maxn];
LL A, B, res;
inline bool inrange(pll x, LL a, LL b) {
return x.X <= a && x.Y <= b;
}
void solve(LL x, LL y) {
LL t = A / x + 10;
while(t * x + y > A) {
--t;
}
(res += t) %= mod;
t = B / x + 10;
while(t * x + y > B) {
--t;
}
(res += t) %= mod;
return;
}
int main() {
a[0] = 1;
a[1] = 2;
for(n = 2; ; ++n) {
a[n] = a[n - 1] + a[n - 2];
if(a[n] > bnd) {
break;
}
}
all[1].pb(mp(2, 1));
all[1].pb(mp(3, 1));
forn(i, 2, n - 1) {
LL a1 = a[i + 1], b1 = a[i], a2 = a1, b2 = b1;
--a1;
--b2;
for(auto tmp: all[i - 1]) {
LL a = tmp.X, b = tmp.Y;
for(LL x = a + b, y = a;;) {
if(x <= bnd && y <= bnd && (x <= a1 && y <= b1 || x <= a2 && y <= b2)) {
all[i].pb(mp(x, y));
}
else {
break;
}
x += a;
}
}
}
int Q;
scf(Q);
while(Q--) {
scf(A, B);
if(A < B) {
swap(A, B);
}
if(B == 1) {
printf("1 %lld\n", A % mod);
continue;
}
if(A == 2 && B == 2) {
puts("1 4");
continue;
}
int ans = n - 1;
while(!inrange(all[ans][0], A, B)) {
--ans;
}
printf("%d ", ans);
res = 0;
--ans;
for(auto tmp: all[ans]) {
if(tmp.X <= B) {
solve(tmp.X, tmp.Y);
}
}
printf("%lld\n", res);
}
return 0;
}
Submission Info
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
1700 / 1700 |
Status |
|
|
Set Name |
Test Cases |
Sample |
s1.txt, s2.txt |
All |
01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, s1.txt, s2.txt |
Case Name |
Status |
Exec Time |
Memory |
01.txt |
AC |
369 ms |
3328 KB |
02.txt |
AC |
382 ms |
3328 KB |
03.txt |
AC |
368 ms |
3328 KB |
04.txt |
AC |
368 ms |
3328 KB |
05.txt |
AC |
371 ms |
3328 KB |
06.txt |
AC |
369 ms |
3328 KB |
07.txt |
AC |
369 ms |
3328 KB |
08.txt |
AC |
368 ms |
3328 KB |
09.txt |
AC |
368 ms |
3328 KB |
10.txt |
AC |
369 ms |
3328 KB |
11.txt |
AC |
635 ms |
1920 KB |
12.txt |
AC |
633 ms |
1920 KB |
13.txt |
AC |
233 ms |
1920 KB |
14.txt |
AC |
232 ms |
1920 KB |
15.txt |
AC |
240 ms |
4096 KB |
16.txt |
AC |
239 ms |
4096 KB |
17.txt |
AC |
157 ms |
3840 KB |
18.txt |
AC |
158 ms |
3840 KB |
19.txt |
AC |
865 ms |
3584 KB |
20.txt |
AC |
865 ms |
3584 KB |
21.txt |
AC |
1 ms |
384 KB |
22.txt |
AC |
1 ms |
384 KB |
23.txt |
AC |
1 ms |
384 KB |
24.txt |
AC |
1 ms |
384 KB |
s1.txt |
AC |
1 ms |
384 KB |
s2.txt |
AC |
1 ms |
384 KB |