1065. A+b and C (64bit) (20) time limit MS Memory limit 65536 KB code length limit 16000 B Award Program StandardAuthor HOU, qiming
Given three integers A, B and C in [ -263, 263], you is supposed to tell whether A+b > C.
Input Specification:
The first line of the input gives the positive number of test cases, T (<=10). Then T-test cases follow, each consists of a single line containing three integers a, B and C, separated by single spaces.
Output Specification:
For each test case, output in one line "case #X: True if a+b>c, or" case #X: false "Otherwise, where X is the case num ber (starting from 1).
Sample Input:
31 2 32 3 49223372036854775807-9223372036854775808 0
Sample Output:
Case #1: falsecase #2: truecase #3: False
Thinking and Analysis:This question is simply a simple ruminate a+b>c whether the problem is established, the only pit point is that the range is 2^63 over the computer long long or the upper limit of __int64 (2^63-1). As a result, there are some obstacles in terms of both input and computation. The basic idea of the weak is to read all the data in a string, and then determine whether the overflow (this refers to a long long overflow, also below), if the overflow is special processing, otherwise normal processing. The following is a slightly specific idea: (ideas may seem a bit messy, but absolutely correct)first, if both A and B are not overflow, then seek a+b. If the overflow must be true, if the overflow must be false, if there is no overflow to determine whether C overflow, if the C overflow is necessarily false, otherwise normal comparison processing can be. If there is an overflow in a and B, the first item on the overflow is moved to a to facilitate subsequent processing. Then determine if C is overflow, if the C overflow through the B symbol can know whether A+B>C is established. If C does not overflow is judged by the a*b symbol, if the a+b<=c is inevitable, otherwise the calculation a+b can (specific small skills to see the program).
another:This weak treatment is not particularly beautiful, resulting in my need for special treatment under A and B are -2^63 situation.
Special attention!!!!!!!!!!!!! Many many of the online problem-solving reports are wrong!!! Wrong in 2^63 + 2^63 > 1 This set of data, however, the title of the official data does not have such data, resulting in many wrong procedures can be passed.
provide a set of data:
8
1 2 3
2 3 4
10-10 0
101-100 0
9223372036854775807-9223372036854775808 0
9223372036854775808 9223372036854775808 1
9223372036854775808-9223372036854775808 1
-9223372036854775808-9223372036854775808-1
Ans
Case #1: False
Case #2: True
Case #3: False
Case #4: True
Case #5: False
Case #6: True
Case #7: False
Case #8: False
Code:
1#include <bits/stdc++.h>2 using namespacestd;3typedefLong LongLL;4 ConstLL INF =0x7fffffffffffffff;5 Const intMAXN = -;6 Const CharSTR[MAXN] ="9223372036854775808";7 Const CharST[MAXN] ="-9223372036854775808";8 9 CharA[MAXN], B[MAXN], C[MAXN];Ten LL na, NB, NC, ND; One A intCheck (LL x) {returnX >0?1: x <0? -1:0; } - - intMain () { the intT, cnt =0; - intTA, TB, TC, TD; - BOOLFA, FB, FC; -scanf"%d", &t); + while(t-- ) { -printf"Case #%d:", ++CNT); +scanf"%s%s%s", A, b, c); A if(!STRCMP (A, st) &&!strcmp (b, ST)) { atPuts"false");Continue; - } -FA =!strcmp (A, str); -FB =!strcmp (b, str); -FC =!strcmp (c, str); - if(!FA &&!)FB) { inSSCANF (A,"%i64d", &na); TA =check (NA); -SSCANF (b,"%i64d", &NB); TB =check (NB); to if(!FC) {sscanf (c,"%i64d", &NC); TC =Check (NC);} +nd = Na + nb; TD =check (ND); - if(TA * tb) >0&& (TA * td) <0 ) { the if(Ta >0) puts ("true" ); * ElsePuts"false" ); $}Else {Panax Notoginseng if(FC) puts ("false" ); - ElsePuts (nd > NC?)"true":"false" ); the } +}Else { ATA = a[0] =='-'? -1: a[0] =='0'?0:1; theTB = b[0] =='-'? -1: b[0] =='0'?0:1; + if(FC) { - if( !FA) {Swap (A, b); swap (TA, TB); Swap (FA, FB);} $ if(TB <=0) puts ("false" ); $ ElsePuts"true" ); -}Else { -SSCANF (c,"%i64d", &NC); TC =Check (NC); the if(Ta ^TB) { - if( !FA) {Swap (A, b); swap (TA, TB); Swap (FA, FB);}WuyiSSCANF (b,"%i64d", &nb); thend = INF + NB +1; -Puts (nd > NC?)"true":"false" ); Wu}ElsePuts"true" ); - } About } $ } - return 0; -}
View Code
PAT 1065 A+b and C (64bit) (20)