B:小小度刷礼品

时间限制: 1000ms 内存限制: 65536kB
描述

一年一度的百度之星又开始了,这次参赛人数创下了吉尼斯世界纪录,于是百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份。

小小度同学非常想得到这份礼品,于是他就连续狂交了很多次,提交ID从a连续到b,他想问问你他能得到多少份礼品,你能帮帮他吗?


输入
第一行一个正整数T表示数据组数;
接下来T行,每行三个不含多余前置零的整数x,a,b (0 <=x <= 10^18, 1 <= a,b <= 10^18,a <= b)
输出
T行,每行为对应的数据情况下,小小度得到的礼品数
样例输入
1
88888 88888 88888
样例输出
1

 1 # include <iostream>
 2 # include <string>
 3 
 4 using std::cin ;
 5 using std::cout ;
 6 using std::endl ;
 7 using std::string ;
 8 
 9 # define MAXDATA 1000000000000000000
10 
11 long long getInt( string data , int num )
12 {
13     int size = data.size( );
14     long long interge = 0 ;
15     bool flag = false ;
16     int index = 0 ;
17 
18     if( num > 0 )
19     {
20         if( size < num ) return -1 ;
21 
22         if( data[0] == '-' )
23         {
24             flag = true ;
25             index = 1 ;
26         }
27         else index = 0 ;
28     }
29     else if( num < 0 )
30     {
31         if( size < -num ) return -1 ;
32         index = size + num ;
33         num = size ;
34     }
35     else return 0 ;
36 
37     for( ; index < num ; index++ )
38     {
39         interge = interge * 10 + ( data[index] - '0' ) ;
40     }
41 
42     return flag ? -interge : interge ;
43 }
44 
45 int main( int argc , char **argv )
46 {
47     int num ;
48 
49     if( cin >> num )
50     {
51         string X , A , B ;
52     long long x , a , b ;
53 
54     while( num-- )
55     {
56         if( (cin >> X >> A >> B) )
57         {
58             x = getInt( X , X.size( ) );
59             a = getInt( A , A.size( ) );
60             b = getInt( B , B.size( ) );
61 
62             if( x >= 0 && x <= MAXDATA &&
63                 a >= 1 && a <= MAXDATA &&
64                 b >= 1 && b <= MAXDATA &&
65                 b >= a)
66             {
67                 int xsize = X.size( ) ;
68                 int res ;
69                 long long ax , bx ;
70 
71                 a = getInt( A , A.size( ) - xsize );
72                 b = getInt( B , B.size( ) - xsize );
73 
74                 ax = getInt( A , -xsize );
75                 bx = getInt( B , -xsize );
76 
77                 if( ax < 0 || bx < 0 ) continue ;
78                 res = b - a ;
79 
80                 if( ax <= x && bx >= x ) cout << res + 1 << endl ;
81                 else if( ax > x && bx < x ) cout << res - 1 << endl ;
82                 else cout << res << endl ;
83                 }
84             }
85         }
86     }
87 
88     return 0 ;
89 }
posted @ 2012-06-02 11:44  crazylhf  阅读(145)  评论(0)    收藏  举报