QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#574049#2519. Number with BachelorslifanAC ✓649ms25336kbC++141.2kb2024-09-18 20:39:362024-09-18 20:39:44

Judging History

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

  • [2024-09-18 20:39:44]
  • 评测
  • 测评结果:AC
  • 用时:649ms
  • 内存:25336kb
  • [2024-09-18 20:39:36]
  • 提交

answer

// 
#include<bits/stdc++.h>
typedef unsigned long long ull;
ull dp[2][21][65536];
int a[21],len,B;
ull dfs(int dep,int s,bool pre,bool lim){
	if(!dep)return 1;
	if(!lim&&!pre&&~dp[B==16][dep][s])return dp[B==16][dep][s];
	ull res=0;
	const int up=lim?a[dep]:B-1;
	for(int i=0;i<=up;++i)
		if(!(s>>i&1))
			if(pre&(!i))res+=dfs(dep-1,0,true,lim&(!a[dep]));
			else res+=dfs(dep-1,s|(1<<i),false,lim&(i==a[dep]));
	if(!lim&&!pre)dp[B==16][dep][s]=res;
	return res;
}
inline ull solve(ull n){
	len=0;
	for(ull i=n;i;i/=B)a[++len]=i%B;
	return dfs(len,0,true,true);
}
int T;
ull l,r;
int main(){
	memset(dp,-1,sizeof(dp));
	scanf("%d",&T);
	for(char tp,op;T--;){
		scanf("\n %c %c",&tp,&op);
		B=tp=='d'?10:16;
		if(op=='0'){
			scanf(tp=='d'?"%llu%llu":"%llx%llx",&l,&r);
			printf(tp=='d'?"%llu\n":"%llx\n",solve(r)-(l?solve(l-1):0));
		}else{
			static ull x,res;
			scanf(tp=='d'?"%llu":"%llx",&x);
			if(x>(tp=='d'?8877691:53319412081141)){
				puts("-");
				continue;
			}
			if(x==1){
				puts("0");
				continue;
			}
			l=0;r=0xffffffffffffffff;
			while(l<=r){
				ull mid=l+(r-l>>1);
				if(solve(mid)>=x)res=mid,r=mid-1;
				else l=mid+1;
			}
			printf(tp=='d'?"%llu\n":"%llx\n",res);
		}
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 38ms
memory: 25284kb

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: 649ms
memory: 25336kb

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