社区讨论
大佬求救高精度20分
P1080[NOIP 2012 提高组] 国王游戏参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m0chngwi
- 此快照首次捕获于
- 2024/08/27 21:54 2 年前
- 此快照最后确认于
- 2024/08/27 22:15 2 年前
高精度结构体```cpp
#include <bits/stdc++.h>
using namespace std;
int n;
struct NODE {
int x, y, sum;
NODE() {
}
NODE(int a, int b): x(a), y(b), sum(a * b) {
} // 初始化
CPPbool operator<(const NODE &x)const {
return sum < x.sum;
}
} e[10010];
struct ll {
int a[10010]; // 各位上的值
int sz; //数位
ll() {
memset(a, 0, sizeof a);
sz = 1;
}
ll (int x) {
memset(a, 0, sizeof a);
sz = 1;
int idx = 1;
while (x > 0) {
a[idx++] = x % 10;
x /= 10 ; // 我是250
}
idx--;
a[0] = idx;
}
ll operator * (const int &x) {
ll b;
int l;
b.sz = sz;
for (int i = 1; i <= sz; i++) {
b.a[i] = a[i] * x;
}
for (int i = 1; i <= sz || b.a[i] > 0; i++) {
l = i;
b.a[i + 1] += b.a[i] / 10;
b.a[i] %= 10;
}
if (b.a[l] > 0) {
b.sz = l;
} else {
l--;
b.sz = l;
}
return b;
}
ll operator /(const int &x) {
ll b;
b.sz = sz;
int res = 0;
for (int i = sz; i >= 1; i--) {
res = res * 10 + a[i];
b.a[i] = res / x;
res %= x;
}
while (b.a[sz] == 0 && b.sz > 1) {
b.sz--;
}
return b;
}
bool operator<(const ll &x)const {
if (sz == x.sz) {
int l;
for (l = sz; a[l] == x.a[l] && l > 1 ; l--);
if (l >= 1)
return a[l] < x.a[l];
}
return 0;
}
};
ll ma;
int main() {
scanf("%d", &n);
for (int i = 0; i <= n; i++) {
int x, y;
scanf("%d%d", &x, &y);
e[i] = {x, y};
}
sort(e + 1, e + n + 1);
// puts("R");
ll last(1);
// puts("R");
for (int i = 1; i <= n; i++) {
if (e[i - 1].x == 0)
break;
last = last * e[i - 1].x;
ll tmp;
tmp = last / e[i].y;
if (ma < tmp)
ma = tmp;
}
for (int i = 1; i <= ma.sz; i++) {
printf("%d", ma.a[ma.sz - i + 1]);
}
return 0;
}
CPP回复
共 2 条回复,欢迎继续交流。
正在加载回复...