社区讨论

大佬求救高精度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) { } // 初始化
CPP
bool 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 条回复,欢迎继续交流。

正在加载回复...