如何在竞技编程中将int视为long long int使用
大多数时候,在竞技编程问题中的输入约束比int的限制要大。因此需要使用long int 或long long int。下面让我们看看两种情况,以便即使naive用户编写正确的逻辑,输入仍未被接受,也能知道哪些位置需要纠正。
Case 1: 未重新定义int为long long int的大整数输入
Case 2: 重新定义 int 为 long long int 的大整数输入
Case 1: 未重新定义int为long long int的大整数输入
例子:
// C++ 程序演示“隐式转换溢出”问题
// 导入输入输出库
#include <iostream>
using namespace std;
//主驱动方法
int main()
{
// 10的10次幂
int x = 1e10;
// 输出数字
cout << x << endl;
// return main的返回类型为整数类型
return 0;
}
输出:
prog.cpp: In function ‘int main()’:
prog.cpp:5:10: warning: overflow in implicit constant conversion [-overflow]
int x = 1e10;
^
输出解释:
这是因为整数数据类型能够容纳的数字范围是4个字节,也就是说它可以容纳范围为-2,147,483,647到2,147,483,647的整数。在本例中,输出超出变量可以容纳的最大整数,因此报告隐式常量转换的警告。 因此我们需要使用long数据类型,因为它可以容纳8个字节。为了纠正这个问题,我们需要重新定义int。但是,程序仍然会抛出错误,因为主数据类型也会更改。 因此,我们将它们定义为int,以便在比赛中可以提高速度。(即) #define int long long int 。
Case 2: 重新定义 int 为 long long int 的大整数输入
例子:
// C++ 程序演示 longlongint方法
// 包括所有基本库
# include <bits/stdc++.h>
using namespace std;
// 主驱动程序int32_t类型返回
int32_t main()
{
//使用sizeof()方法计算整数数据类型的大小
cout << "size of int = " << sizeof(int) << '\n';
// 定义 int 为 long long int
# define int long long int
//再次使用标准sizeof()方法计算Integer数据类型的新大小
cout << "new size of int = " << sizeof(int) << '\n';
//大的定制输入整数
int x = 1e18;
//打印并显示该大整数值
cout << "value of x = " << x << endl;
return 0;
}
输出:
size of int = 4
new size of int = 8
value of x = 1000000000000000000
时间复杂度:O(1)
辅助空间:O(1)
注意: 这通常用于竞技编程问题,因为它将接受所有输入大小。