携程T3只过了83.3%,求帮看看是啥问题

携程T3只过了83.3%,求帮看看是啥问题

#include <bits/stdc++.h>
using namespace std;

inline long long read(){
    long long x = 0;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x;
}

long long n;

// |x! * y - y - n| 最小
// 即 构造 x, y, 使得 (x! - 1) * y 最接近 n
// info[i] = i! - 1
long long info[] = {-1, 0, -1, 5, 23, 119, 719, 5039, 40319, 362879, 3628799, 39916799, 479001599};

int main(){
    n = read();
    long long x = 1, y = 1;
    long long mmin = 0x7FFFFFFFFFFFFFFF;
    
    // 枚举 所有的 (x! - 1), 计算 使 (x! - 1) * y 最接近 n 的 y
    for(long long i = 3; i < 13; i++){
        if(info[i] > n){
            break;
        }
        long long mod = n % info[i];
        mod = min(mod, abs((n / info[i]) * info[i] - n));
        if(mod < mmin){
            mmin = mod;
            x = i;
            y = n / info[i];
        }
    }
    cout << x << ' ' << y << endl;
    return 0;
}

全部评论
是不是没有考虑 (x!-1) * y == (n / info[i] + 1) * info[i] 的情况,这个时候 y 应该等于 n / info[i] + 1
点赞 回复 分享
发布于 2023-03-29 22:11 四川
有特判y不等于2吗😂
点赞 回复 分享
发布于 2023-03-29 22:26 湖北

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务