为什么把数组a的类型改成long long才能过
35分代码:(sub1 WA, sub4和sub5除了第三个数据点以外全部WA)
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e7 + 10; // Set a right value according to your solution.
int n, a[MAXN + 10];
unsigned long long ans = 0;
namespace Generator {
unsigned long long k1, k2;
int thres;
inline unsigned long long xorShift128Plus() {
unsigned long long k3 = k1, k4 = k2;
k1 = k4, k3 ^= (k3 << 23), k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26);
return k2 + k4;
}
inline void generate() {
for (int i = 1; i <= n; ++i) {
a[i] = xorShift128Plus() % thres;
}
}
} // namespace Generator.
int main() {
scanf("%d", &n);
scanf("%llu %llu %d", &Generator::k1, &Generator::k2, &Generator::thres);
Generator::generate();
// Now array a[1..n] represents the sequence A in the statement.
int i = 1;
while (i <= n) {
int tmp, p, end = i, value = a[i];
for (p = i; p <= n; p++) {
if (a[p] < a[i]) {
if (a[p] <= value) value = a[p], end = p;
}
}
tmp = a[i]; a[i] = value; a[end] = tmp;
i = end + 1;
}
for (int j = 1; j <= n; j++) {
ans += j * a[j];
}
printf("%llu\n", ans);
return 0;
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e7 + 10; // Set a right value according to your solution.
int n; unsigned long long a[MAXN + 10];
unsigned long long ans = 0;
namespace Generator {
unsigned long long k1, k2;
int thres;
inline unsigned long long xorShift128Plus() {
unsigned long long k3 = k1, k4 = k2;
k1 = k4, k3 ^= (k3 << 23), k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26);
return k2 + k4;
}
inline void generate() {
for (int i = 1; i <= n; ++i) {
a[i] = xorShift128Plus() % thres;
}
}
} // namespace Generator.
int main() {
scanf("%d", &n);
scanf("%llu %llu %d", &Generator::k1, &Generator::k2, &Generator::thres);
Generator::generate();
// Now array a[1..n] represents the sequence A in the statement.
int i = 1;
while (i <= n) {
int tmp, p, end = i, value = a[i];
for (p = i + 1; p <= n; p++) {
if (a[p] < a[i]) {
if (a[p] <= value) value = a[p], end = p;
}
}
tmp = a[i]; a[i] = value; a[end] = tmp;
i = end + 1;
}
for (int j = 1; j <= n; j++)
ans += j * a[j];
printf("%llu\n", ans);
return 0;
}
明明数据范围不会爆int的