c++ - 为什么这无效,但在本地有效?— codeforces 中的国王种族问题
问题描述
有人可以帮助新的 C++ 学习者吗?
我正在尝试在https://codeforces.com/contest/1075/problem/A解决国王的比赛问题
问题定义:
白王位于点 (1,1),黑王位于由第一个输入定义的点,即 (n,n)。第一个输入还定义了电路板尺寸。
接下来的两个输入定义了两个国王将比赛的点,第一个到达该点的国王获胜。自然白王总是先走。然而,在这个问题中,国王可以站在相邻的单元格中,甚至可以同时站在同一个单元格中。
预期输出应该是赢得比赛的国王的颜色。
问题是在提供输入时719386363530333627 620916440917452264 265151985453132665
预期的输出是黑色的,我可以确认这是在本地运行代码,但是当通过 codeforces 测试集运行代码时,它无法通过输出白色来给出正确的答案。
这是我的代码:
#include <iostream>
using namespace std;
int main(){
// take inputs
long long board_length;
long long price_coordinate_x;
long long price_coordinate_y;
cin >> board_length;
cin >> price_coordinate_x;
cin >> price_coordinate_y;
// starting points for kings
int white_x = 1;
int white_y = 1;
long long black_x = board_length;
long long black_y = board_length;
// Difference between price coordinate points
long long point_difference_white = labs(price_coordinate_x-price_coordinate_y);
long long point_difference_black = labs(price_coordinate_x-price_coordinate_y);
// if x > y => y will be the first value we'll reach
if (price_coordinate_x > price_coordinate_y) {
point_difference_white += labs(white_x-price_coordinate_y);
point_difference_black += labs(black_x-price_coordinate_x);
}
else if (price_coordinate_x < price_coordinate_y) {
point_difference_white += labs(white_x-price_coordinate_x);
point_difference_black += labs(black_y-price_coordinate_y);
}
else {
point_difference_white += labs(white_x-price_coordinate_x);
point_difference_black += labs(black_x-price_coordinate_x);
}
if (point_difference_black >= point_difference_white) {
cout << "White" << endl;
}
else if (point_difference_black < point_difference_white) {
cout << "Black" << endl;
}
return 0;
}
解决方案
您使用std::labs()
which 使用long
整数。
在long
目标系统上,整数很可能是 32 位。
这意味着您的 64 位long long
变量不会得到大值的正确结果。
获得正确结果的简单方法是使用std::llabs()
.
您可能还需要考虑使用具有固定宽度的类型,例如std::int64_t
- 或使用最大的有符号整数:std::intmax_t
.
<cinttypes>
声明这些abs
函数std::intmax_t
:
std::intmax_t abs( std::intmax_t n );
std::intmax_t imaxabs( std::intmax_t n );
推荐阅读
- mysql - SQL使用下一个序列值创建表格式:'for'附近的语法不正确
- javascript - 如何将数字转换为特殊格式
- hadoop - 无法阻止 Oozie 逻辑炸弹
- android - Android - 如何在以编程方式隐藏软按钮后取消隐藏它们?
- jquery - jQuery文件上传插件在上传第二张图片时再次上传第一张图片
- react-native - 如何将领域与异步获取请求一起使用?
- java - JSP 在第一次执行时执行一个 java 类来设置后端
- ssis - SQL Server 和 SSIS 包中的版本兼容性问题
- blazor - 在同一页面上运行多个 Blazor 应用
- javascript - img比较滑块移动