题解 | #【模板】整数域三分#

【模板】整数域三分

https://www.nowcoder.com/practice/12e52f8182354b94b7ff4800dc1c0cfc

#include "bits/stdc++.h"

using namespace std;
#define int long long
#define pb push_back
#define endl "\n"
#define x first
#define y second
#define PII pair<int,int>
#define PIII pair<int,PII>
const int MOD = 1e9 + 7;
const int N = 3e5;

void slu() {
    int n, l, r;
    cin >> n >> l >> r;
    vector<int> k(n);
    vector<int> a(n);
    vector<int> b(n);
    for (int i = 0; i < n; i++)cin >> k[i] >> a[i] >> b[i];
    int t1 = 0, t2 = 0;
    for (int i = 0; i < n; i++) t1 += abs(k[i] * l + a[i]) + b[i], t2 += abs(k[i] * r + a[i]) + b[i];
    int Min = min(t1, t2);
    while (r - l > 10) {
        int dis = (r - l) / 3;
        int mid1 = l + dis;
        int mid2 = r - dis;
        int m1 = 0, m2 = 0;
        for (int i = 0; i < n; i++) m1 += abs(k[i] * mid1 + a[i]) + b[i], m2 += abs(k[i] * mid2 + a[i]) + b[i];
        if (m1 < m2) r = mid2;
        else l = mid1;
    }
    for (int i = l; i <= r; i++) {
        int temp = 0;
        for (int j = 0; j < n; j++) temp += abs(k[j] * i + a[j]) + b[j];
        Min = min(Min, temp);
    }
    cout << Min << endl;
}

signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T;
    cin >> T;
//    T = 1;
    while (T--)slu();

}

全部评论

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务