1065. A+B and C (64bit) (20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
HOU, Qiming
Given three integers A, B and C in [-263, 263], you are 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 number (starting from 1).
Sample Input:3 1 2 3 2 3 4 9223372036854775807 -9223372036854775808 0Sample Output:
Case #1: false Case #2: true Case #3: false
题意:判断两数和与另一个数的关系
解题思路:数据刚好是超了long long int的,所以用了unsigned long long,符号用标记来记录
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <cmath>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <functional>
using namespace std;
#define LL long long
const int INF = 0x3f3f3f3f;
typedef unsigned long long ull;
const ull inf = 1ull << 63;
char s[1009];
ull a, b, c;
int main()
{
int t, cas = 0;
scanf("%d", &t);
while (t--)
{
printf("Case #%d: ", ++cas);
int flag1 = 0, flag2 = 0, flag3 = 0, flag = 1;
scanf("%s", s); flag1 = s[0] == '-'; sscanf(flag1 ? s + 1 : s, "%llu", &a);
scanf("%s", s); flag2 = s[0] == '-'; sscanf(flag2 ? s + 1 : s, "%llu", &b);
scanf("%s", s); flag3 = s[0] == '-'; sscanf(flag3 ? s + 1 : s, "%llu", &c);
if (a == inf && a == b && flag1 == flag2&&flag1) flag = 0;
else if (flag1 == flag2) b += a;
else
{
if (flag1)
{
if (a > b) flag2 = 1,b = a - b;
else b -= a;
}
else if (a >= b) flag2 = 0, b = a - b;
else b -= a;
}
if (flag2 == flag3)
{
if (flag2&&b >= c) flag = 0;
if (!flag2&&b <= c) flag = 0;
}
else if (flag2) flag = 0;
if (flag) printf("true\n");
else printf("false\n");
}
return 0;
}