QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#574035#2519. Number with BachelorsddxrSTL 45ms54844kbC++231.7kb2024-09-18 20:38:122024-09-18 20:38:13

Judging History

你现在查看的是最新测评结果

  • [2024-09-18 20:38:13]
  • 评测
  • 测评结果:TL
  • 用时:45ms
  • 内存:54844kb
  • [2024-09-18 20:38:12]
  • 提交

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) {
	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) - init(l - 1));
	} else if(opt == '1') {
		l = read();
		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) puts("-");
		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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 45ms
memory: 54844kb

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: -100
Time Limit Exceeded

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:


result: