题目测试数据范围过大
查看原帖
题目测试数据范围过大
1049033
luogu_00楼主2024/11/2 19:02
#include <bits/stdc++.h>
using namespace std;
long long a, b, c = 1, s = 1000000000, i;
int main() {
    cin >> a >> b;
    for (i = 1; i <= b; i++) c *= a;
    if (c > s) cout << "-1";
    else cout << c;
    return 0;
}

只能得 70 分

这段代码明显是正确的,就分析一下: 用 c 存储 aba^b 的值,初始化为 1,用全局变量 i 当做循环变量,让 c 乘以 a 共 b 次,如果 c 大于 s (1000000000 是 10910^9)则返回 -1 警示,否则返回 c 也就是 aba^b 的值。

问题出在:long long 表示不了所有数据,2642^{64} 显然 long long 表示不了(long long 最大也就 2632^{63}),所以即使 c 用 long long 存储也达不到 AC 。

以下测试点是 WA 的,它们最终的值应该是 long long 表示不了的:#8、#11、#19 ~ #21 。

首先先看题目的数据范围:
对于 6060% 的数据,保证 ab1018a^b ≤ 10^{18}

所以如果分数低于 60 分那问题就出在代码中使用了 int 类型或者代码逻辑本身有错。
分数高于 60 分得怪题目吧测试数据的范围设置的过大(long long 最大可以表示大约 8.4×10198.4 × 10^{19},所以分数 70 分不要奇怪)。

2024/11/2 19:02
加载中...