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 }

浙公网安备 33010602011771号