社区讨论

真心求助!70分#2,#5,#7 RE!

P1080[NOIP 2012 提高组] 国王游戏参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mi6hatt8
此快照首次捕获于
2025/11/20 04:52
4 个月前
此快照最后确认于
2025/11/20 04:52
4 个月前
查看原帖
已评测许多遍,无法找到问题,感谢提供帮助的dalao!
附代码:
CPP
#include <cstdio>
#include <algorithm>
#include <cstring>
const int MXLNTH = 10010;
struct ser{ int l, r; } a[10100];
int n, l1, r1, minn[MXLNTH], mul[MXLNTH], dive[MXLNTH], tmp[MXLNTH];
inline bool cmp(ser x, ser y) {return x.l*x.r < y.l*y.r;}
inline void multiply(int che) {
    int sa[MXLNTH] = {0}, x(0);
    sa[0] = mul[0];
    for (int i = MXLNTH - 1, j = mul[0]; (i >= 1) && (j >= 1); --i, --j)
        sa[i] = mul[j];
    for (int i = MXLNTH - 1; i >= 1; --i) {
        sa[i] *= che;
        sa[i] += x;
        x = sa[i] / 10;
        sa[i] %= 10;
    }
    int len(1);
    while (!sa[len]) len++;
    mul[0] = (MXLNTH - 1) - len + 1;
    for (int i = 1; i <= mul[0]; ++i)
        mul[i] = sa[(MXLNTH - 1) - mul[0] + i];
    return ;
}
inline void divide(int chu) {
    memset(dive, 0, sizeof dive);
    memset(tmp, 0, sizeof tmp);
    int k(0);
    for (int i = 1; i <= mul[0]; ++i){
        tmp[i] = (k * 10 + mul[i]) / chu;
        k = (k * 10 + mul[i]) % chu;
    }
    int len(1);
    while(!tmp[len]) len++;
    for (int i = len, j = 1; i < MXLNTH; ++i, ++j)
        dive[j] = tmp[i];
    dive[0] = mul[0] - len + 1;
    if(!dive[0]) dive[0] = 1;
    return ;
}
inline bool compare() {
    if(minn[0] != dive[0]) return minn[0] < dive[0];
    else for (int i = 1; i <= minn[0]; ++i) if(minn[i] != dive[i]) return minn[i] < dive[i];
    return false;
}
inline void doit() {
    for (int i = 0; i < MXLNTH; ++i)
        minn[i] = dive[i];
    return ;
}
inline void print() {
    for (int i = 1; i <= minn[0]; ++i)
        printf("%d", minn[i]);
    printf("\n");
    return ;
}
int main() {
    scanf("%d", &n);
    for (int i = 0; i <= n; ++i) scanf("%d%d", &a[i].l, &a[i].r);
    std::sort(a+1, a+1+n, cmp);
    mul[0] = 1; mul[1] = 1;
    for (int i = 0; i <= n; ++i) {
        if(i > 0) divide(a[i].r);
        else dive[0] = 1;
        multiply(a[i].l);
        if(compare()) doit();
    }
    print();
    return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...