70分求助(WA on 5、8、9)
查看原帖
70分求助(WA on 5、8、9)
357463
IGJHL楼主2023/7/10 12:24

rt,代码如下。

#include <iostream>

#define int long long

using namespace std;

const int N = 5e4 + 10;

int n, d, h[N] = {0};

bool cxk(int x) {
    int cnt = 1, hp = 0;
    for (int i = 1; i <= d; ++ i) {
    	hp >>= 1;
        while (hp < x) {
            if (cnt > n)
                return false;
            hp += h[cnt ++];
        }
    }
    
    return true;
}

int ch[N];
void wrt(int x) {
	int cnt = 1, hp = 0;
    for (int i = 1; i <= d; ++ i) {
    	hp >>= 1;
        while (hp < x)
            hp += h[cnt], ch[cnt ++] = i;
    }
    
    for (int i = 1; i <= n; ++ i)
    	cout << ch[i] << "\n";
}

signed main() {
    cin >> n >> d;
    
    int l = 1, r = 1;
    for (int i = 1; i <= n; ++ i)
        cin >> h[i], r += h[i];
    
    while (r - l > 1) {
        int mid = r + l >> 1;
        if (cxk(mid))
            l = mid;
        else
            r = mid;
    }
    cout << l << "\n";
    wrt(l);
    
    return 0;
}
2023/7/10 12:24
加载中...