QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#84606 | #1875. Nein | doctorZ_ | RE | 0ms | 0kb | C++14 | 2.0kb | 2023-03-06 16:14:09 | 2023-03-06 16:14:09 |
Judging History
answer
#include<cstdio>
#include<algorithm>
#define int128 __int128
#define ll long long
using namespace std;
const int N=37,S=20*8+20,K=100,P=20;
void write(int128 x)
{
if(x>=10) write(x/10),putchar('0'+x%10);
else putchar('0'+x);
}
int k;int128 n,Pow[N+10];
int128 g[K+1][S+10],f[K+2][S+10];
int h[N+10];
int128 get(int128 num)
{
// write(num);putchar('\n');
f[0][0]=1;
// write(f[0][1]);putchar('\n');
// return 0;
for(int i=0;i<k;i++)
{
for(int s=0;s<=S;s++) f[i+1][s]=0;
for(int s=0;s<=S;s++)
{
if(!f[i][s]) continue;
int lim=0;
for(int j=0;i+1+j*k<=N;j++)
if(h[i+1+j*k]==-1)
lim++;
else break;
int rs=0;
for(int j=0;i+1+j*k<=N;j++)
if(h[i+1+j*k]!=-1)
rs+=h[i+1+j*k];
// printf("%d %d\n",i,s);
// printf("%d %d\n",lim,rs);
for(int s1=0;s1<=S;s1++)
if(s1+s+rs<=S&&(s1+s+rs)%10==num/Pow[i]%10&&g[lim][s1])
f[i+1][(s1+s+rs)/10]+=f[i][s]*g[lim][s1];
}
}
int128 ans=0;
for(int s=0;s<=S;s++)
if(s==num/Pow[k])
ans+=f[k][s];
// write(ans),putchar('\n');
return ans;
}
int main()
{
freopen("a.in","r",stdin);
scanf("%d",&k);
ll tmp;scanf("%lld",&tmp);n=tmp;
g[0][0]=1;
for(int i=1;i<=N/k+1;i++)
for(int s=0;s<=S;s++)
for(int j=0;j<=min(s,8);j++)
g[i][s]+=g[i-1][s-j];
Pow[0]=1;for(int i=1;i<=N;i++) Pow[i]=Pow[i-1]*10;
for(int i=1;i<=N;i++) h[i]=-1;
int128 nk=Pow[k]-1;
for(int i=N;i>=1;i--)
{
int128 sum=0;
for(int j=0;j<=8;j++)
{
h[i]=j;
for(int i=1;i<=1;i++)
sum+=get(nk*i);
// printf("i %d j %d\n",i,j);
// write(sum),putchar('\n');
if(sum>n)
{
// h[i]=j-1;
break;
}
if(sum==n)
{
break;
}
}
int tmp=h[i];
sum=0;
for(int j=0;j<tmp;j++)
{
h[i]=j;
for(int i=1;i<=1;i++)
sum+=get(nk*i);
}
h[i]=tmp;
n-=sum;
}
// return 0;
int128 ans=0;
for(int i=N;i>=1;i--)
if(h[i]!=-1&&h[i])
{
ans+=Pow[i-1]*h[i];
// for(int j=i;j>=1;j--) printf("%d",h[j]);
// return 0;
}
write(ans/nk);
return 0;
}
詳細信息
Test #1:
score: 0
Runtime Error
input:
1 1