QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#573507 | #2519. Number with Bachelors | lifan | WA | 190ms | 111420kb | C++14 | 2.8kb | 2024-09-18 19:03:27 | 2024-09-18 19:03:31 |
Judging History
answer
//
#include<bits/stdc++.h>
using namespace std;
const int N=(1<<16)+10,M=105;
int T;
int type;
int cnt,a[M];
unsigned long long dp[M][N][2];
unsigned long long dfs(int pos,bool limit,int now){
if(!pos){
return 1;
}
if(!limit&&dp[pos][now][(type==10)?0:1]!=-1){
return dp[pos][now][(type==10)?0:1];
}
int up=limit?a[pos]:type-1,res=0;
for(int i=0;i<=up;i++){
if((now>>i)&1){
continue;
}
if(now==0&&i==0){
res+=dfs(pos-1,limit&&i==up,now);
}
else{
res+=dfs(pos-1,limit&&i==up,now|(1<<i));
}
}
if(!limit){
dp[pos][now][(type==10)?0:1]=res;
}
return res;
}
unsigned long long solve(unsigned long long x){
cnt=0;
while(x){
a[++cnt]=x%type;
x/=type;
}
return dfs(cnt,1,0);
}
unsigned long long read(){
unsigned long long x=0;
char s[22];
scanf("%s",s+1);
int len=strlen(s+1);
for(int i=1;i<=len;i++) {
if(s[i]<='9'&&s[i]>='0'){
x=x*type+s[i]-'0';
}
else{
x=x*type+s[i]-'a'+10;
}
}
return x;
}
void print(unsigned long long x){
if(x==0){
printf("0\n");
return ;
}
if(type==10){
printf("%llu\n", x);
}
else{
vector<int> ans;
while(x){
int p=x%type;
x/=type;
ans.push_back(p);
}
for(int i=ans.size()-1;i>=0;i--) {
if(ans[i]>=10){
printf("%c",ans[i]-10+'a');
}
else{
printf("%c",ans[i]+'0');
}
}
printf("\n");
}
}
signed main(){
memset(dp,-1,sizeof dp);
scanf("%d",&T);
while(T--){
char op[10];
scanf("%s",op);
if(op[0]=='d'){
type=10;
}
else{
type=16;
}
int flag;
scanf("%d",&flag);
if(!flag){
unsigned long long a=read(),b=read();
unsigned long long ans=solve(b);
if(a>0){
ans-=solve(a-1);
}
print(ans);
}
else{
unsigned long long x=read();
if(x<10){
printf("%llu\n",x-1);
continue;
}
unsigned long long l=0,r=0,ans=0;
r--;
if(solve(r)<x){
printf("-\n");
continue;
}
while(l<=r){
unsigned long long mid=(l+r)>>1;
if(solve(mid)>=x){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
print(ans);
}
}
}
/*
6
d 0 10 20
h 0 10 1f
d 1 10
h 1 f
d 1 1000000000
h 1 fffffffffffffff
*/
詳細信息
Test #1:
score: 100
Accepted
time: 45ms
memory: 111320kb
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
Wrong Answer
time: 190ms
memory: 111420kb
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 ffffffffab378500 26054 3 1356 - 946307 4681 40 387 - - - 491850 0 1 29 - 4605298 1 1 - 15b4 175f ffffffff44134000 124b7 6279 9 6257 - ffffffffbe22a900 36b59300 146ce 2a55 - 0 - 7 d 6 2041 - ffffffff4afe7300 0 5 9149 16540973 1389 125 0 - 31189480 424 66800 7 - - 1e6 0 0 48b6 ...
result:
wrong answer 7th lines differ - expected: '8daab378500', found: 'ffffffffab378500'