题意:给出两个数,代表一个区间 [ l, r ],求出在这区间中的符合第一位数等于最后一位数的个数
链接:http://codeforces.com/problemset/problem/204/A
思路:通过规律可推出 [ 1, n ] 区间中满足条件的个数,求出 [ 1, r ]与 [ 1, l - 1 ]两个区间里的符合条件的数的个数,求差值即可。
注意点:[ 1, n ] 区间中满足条件的数字个数的处理
以下为AC代码:
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged |
---|---|---|---|---|---|---|---|---|
10042591 | Practice: luminous11 | 204A - 22 | GNU C++11 | Accepted | 30 ms | 4 KB | 2015-02-27 12:40:51 | 2015-02-27 12:40:51 |
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <deque>
#include <list>
#include <cctype>
#include <algorithm>
#include <climits>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#define ll long long
#define ull unsigned long long
#define all(x) (x).begin(), (x).end()
#define clr(a, v) memset( a , v , sizeof(a) )
#define pb push_back
#define mp make_pair
#define read(f) freopen(f, "r", stdin)
#define write(f) freopen(f, "w", stdout)
using namespace std;
//const double pi = acos(-1);
ll calc ( ll a )
{
ll tmp = a;
ll eps = 10LL;
if ( a < eps )return a;
ll ans = ( 9LL + tmp / eps );
ll p = tmp % eps;
while ( tmp >= eps ){
tmp /= eps;
}
ll q = tmp;
if ( q > p ){
ans --;
}
return ans;
}
int main()
{
ll m, n;
while ( cin >> m >> n ){
cout << calc ( n ) - calc ( m - 1 ) << endl;
}
}