被搞li了
  • 板块灌水区
  • 楼主WWJbkcpl
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/17 10:14
  • 上次更新2024/9/17 13:19:24
查看原帖
被搞li了
1439103
WWJbkcpl楼主2024/9/17 10:14

csp提高级的第19题补全程序,把正确答案填到程序里后是这个:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int n, B, w[maxn], v[maxn];
int gcd(int u, int v) {
    if (v == 0)
        return u;
    return gcd(v, u % v);
} 

void print(int w, int v) {
    int d = gcd(w, v);
    w = w / d;
    v = v / d;
    if (v == 1)
        printf("%d\n", w);
    else
        printf("%d/%d\n", w, v);
}
void swap(int &x, int &y) {
    int t = x; x = y; y = t;
}

int main() {
    cin>>n>>B;
    for (int i = 1; i <= n; i ++) {
        scanf("%d %d", &w[i], &v[i]);
    }
    for (int i = 1; i < n; i ++)
        for (int j = 1; j < n; j ++)
            if (w[j] * v[j+1] < w[j+1] * v[j]) {
                swap(w[j], w[j + 1]);
                swap(v[j], v[j + 1]);
            }
    int curV, curW;
    if  (v[1] <= B) {
        curV = v[1]; curW = w[1];
    } else {
        print(B * w[1] , v[1]);
        return 0;
    }
    for (int i = 2; i <= n; i ++)
        if (curV + v[i] <= B) {
            curV += v[i];
            curW += w[i];
        } else {
            print (curW * v[i] + (B - curV) * w[i], v[i]);
            return 0;
        }
    print(curW, 1);
    return 0;
}
稍微改了一下(scanf改cin

然后输入样例:

 3 8
 4 4 2 
 5 3 2
 

结果输出的是39/5,而并非是正确答案中的42/5

为什么啊

传送门

2024/9/17 10:14
加载中...