QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#574067 | #2519. Number with Bachelors | lifan | AC ✓ | 315ms | 54776kb | C++14 | 1.8kb | 2024-09-18 20:42:19 | 2024-09-18 20:42:20 |
Judging History
answer
//
//½øÖÆת»»ºÃÌâ°¡
#include<bits/stdc++.h>
typedef unsigned long long ll;
using namespace std;
int a[25], B, cnt;
ll f[2][2][25][1 << 16], l, r;
ll dfs(int pos, int tmp, bool limit, bool flg) {
if(pos == -1) return 1;
if(!limit && f[flg][B == 10][pos][tmp] != 18446744073709551615ull) return f[flg][B == 10][pos][tmp];
ll up = limit ? a[pos] : B - 1, res = 0;
for(int i = 0; i <= up; i++) if(!(flg | (i > 0)) || !(tmp & (1 << i))) res += dfs(pos - 1, (flg | (i > 0)) ? (tmp | (1 << i)) : tmp, limit & (i == up), flg | (i > 0));
if(!limit) f[flg][B == 10][pos][tmp] = res;
return res;
}
ll init(ll x) {
if(x == 18446744073709551615ull) return 0;
cnt = 0;
while(x) a[cnt++] = x % B, x /= B;
return dfs(cnt - 1, 0, 1, 0);
}
ll read() {
ll qpow = 1, sum = 0;
string s;
cin>>s;
for(int i = s.length() - 1; ~i; i--) {
int p = (('0' <= s[i] && s[i] <= '9') ? s[i] - '0' : (s[i] - 'a' + 10));
sum += p * qpow;
qpow *= B;
}
return sum;
}
void print(ll x) {
if(x == 0) return cout<<0<<'\n', void();
cnt = 0; while(x) a[cnt++] = x % B, x /= B;
for(int i = cnt - 1; ~i; i--) {
if(a[i] <= 9) cout<<a[i];
else cout<<char(a[i] - 10 + 'a');
}
cout<<'\n';
}
void solve() {
char opt;
cin>>opt;
if(opt == 'd') B = 10; else B = 16;
cin>>opt;
if(opt == '0') {
l = read(), r = read();
print(init(r) - ((l > 0) ? init(l - 1) : 0));
} else if(opt == '1') {
l = read();
if(l == 1) return cout<<"0\n", void();
ll L = 0, R = 9223372036854775807ll, mid, ans = -1;
while(L <= R) {
mid = L + R >> 1;
if(init(mid) >= l) ans = mid, R = mid - 1;
else L = mid + 1;
}
if(ans == -1) cout<<'-'<<'\n';
else print(ans);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
memset(f, -1, sizeof f);
int t; cin>>t;
while(t--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 40ms
memory: 54772kb
input:
6 d 0 10 20 h 0 10 1f d 1 10 h 1 f d 1 1000000000 h 1 ffffffffffffffff
output:
10 f 9 e - -
result:
ok 6 lines
Test #2:
score: 0
Accepted
time: 315ms
memory: 54776kb
input:
50000 h 1 147a d 0 25 71 d 1 3587 d 0 26922 51887 d 1 711 d 0 3 5 h 0 7bf2defab442a0b1 f299a4cf1d4d9bed d 0 6961 91018 d 1 4 d 1 876 h 1 12cc5d3370f99120 d 1 161315 h 0 25f 6959 d 0 467 516 d 1 298 h 1 70260cdc2da73281 h 1 928e17d65d764ca2 h 1 c8ec8a7b67605e51 d 1 91697 d 0 4941925161850941148 89850...
output:
1b36 43 6587 7710 953 3 8daab378500 26054 3 1356 - 946307 4681 40 387 - - - 491850 0 1 29 - 4605298 1 1 - 15b4 175f 9b944134000 124b7 6279 9 6257 - 39be22a900 5c636b59300 146ce 2a55 - 0 - 7 d 6 2041 - 1c94afe7300 0 5 9149 16540973 1389 125 0 - 3bc31189480 424 66800 7 - - 1e6 0 0 48b6 9 - 2b0 5019 14...
result:
ok 50000 lines