A - Printing Books
题意:
her comic book from number X. In other words the first page has number X written on it, the second page has number X + 1 written on it, and so on.
给定n,x 。 x是他第一页写的数字后面依次+1,n是这些所有页数上的数字的位数和,比如第一页是99第二页是100那么n为5总共五个位数。问题为给定n,x求总页数或者这种情况不存在。
预处理一下 每种位数下一个位数的第一个数 用nextgo数组来记录这样来模拟一遍把n不断减小最后看看能后取模成功
过程中记录页数和
#include<bits/stdc++.h>
using namespace std;
#define maxn 20
#define ll long long
ll t,l,r,tempx,flag;
ll nextgo[maxn],n,x,ans,sumx;
void init()
{
for(int i=1; i<=16; i++)
{
l=1;
r=10;
for(int j=1; j<i; j++)
{
l *= 10;
r *= 10;
}
nextgo[i] = r;
}
}
int main()
{
init();
cin>>t;
while(t--)
{
sumx=flag=ans=0;
cin>>n>>x;
tempx=x;
while(tempx)
{
tempx/=10;
sumx++;
}
while(n>(nextgo[sumx]-x)*sumx)
{
n-=(nextgo[sumx]-x)*sumx;
ans+= nextgo[sumx]-x;
x = nextgo[sumx];
sumx++;
}
if(n%sumx==0)
{
flag=1;
ans+= n/sumx;
cout<<ans<<endl;
}
if(!flag)cout<<-1<<endl;
}
return 0;
}