题意:给你N,X, X表示这本书从X开始编号,每个X是几位数,计数器就加几,
然后问你如果从X,开始编号,计数器为N的时候,翻了几页,不能刚好为N输出-1.
(例如,5 99,答案为2,因为5位数需要,99 100 2+3==5,r如果是6,99则无解输出-1)
题解:当然一段一段的减就行了,每一段长度一样的嘛,预处理10的15次方出来,然后减掉小于位数的,
对于减了剩余的部分,每一个数都是相同位数的,所以用剩下的n mod位数,为0说明有解,不为0就肯定没解了啊!
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lld long long 4 int T; 5 lld f[17],n,x,ans; 6 int main() 7 { 8 scanf("%d",&T); 9 f[1]=10; 10 for (int i=2;i<=16;i++) f[i]=f[i-1]*10; 11 while (T--) 12 { 13 ans=0; 14 scanf("%lld%lld",&n,&x); 15 lld xx=x,i=0; 16 while (xx) xx/=10,i++; 17 while (n>=i*(f[i]-x)) 18 { 19 n=n-(f[i]-x)*i; 20 ans+=f[i]-x; 21 x=f[i]; 22 i++; 23 24 } 25 if (n%i==0) printf("%lld ",ans+n/i);else puts("-1"); 26 } 27 }