刷题记录之PAT 1001(2)
题目描述:
给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。
输入描述:
输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。
输出描述:
对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。
输入例子:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出例子:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
代码实现:
#include <iostream>
#include<cstring>
#include<algorithm>
#define what_is(x) cerr <<#x<<"is"<<x<<endl;
using namespace std;
using II =long long;
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int T;
cin>>T;
for(int cases=1;cases<=T;cases++)
{
II a,b,c;
cin>>a>>b>>c;
if(a>c-b)
{
printf("Case #%d: true\n",cases);
}
else
{
printf("Case #%d: false\n",cases);
}
}
return 0;
}
关于ios::sync_with_stdio(false);和cin.tie(0);cout.tie(0);
一、sync_with_stdio
这个函数是一个“是否兼容stdio
”的开关,C++
为了兼容C,保证程序在使用了std::printf
和std::cout
的时候不发生混乱,将输出流绑到了一起。
cin
,cout
之所以效率低,是因为要先把输出的东西存入缓冲区,再输出,导致效率降低,这段语句正好可以打消iostream
的输入输出缓存,可以节省许多时间,使得效率与scanf
与printf
相差无几。
二.tie
tie
是将两个stream
绑定的函数,空参数的话返回当前的输出流指针。
在默认的情况下cin
绑定的是cout
,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)
(0表示NULL)来解除cin
与cout
的绑定,进一步加快执行效率。