Gym-101915A Printing Books 模拟

题面

题意:给你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  } 
原文地址:https://www.cnblogs.com/qywhy/p/9741795.html