• Codeforces Round #610 (Div. 2)


    A题

    给两个范围,求不在第二个范围的第一个范围的点的个数

    int main() {
        int q;
        cin >> q;
        while(q--) {
            int a,b,c,d;
            cin >> a >> b >> c >> d;
            if(a > b) swap(a,b);
            int l = c-d;
            int r = c+d;
            int ans = 0;
            if(r<a||l>b) {
                cout << b - a << endl;
                continue;
            }
            if(l > a) ans += l - a;
            if(r < b) ans += b - r;
            cout << ans << endl;
        }
        return 0;
    }
    

    B题

    总共有p个钱,有n件东西,可以一件一件买,也可以k件一块买,求最多可以买到多少件东西
    从0到k-1都模拟出来和,求最大的

    ll a[MAXN],b[MAXN];
    
    int main() {
        int q,n,k;
        ll p;
        cin >> q;
        while(q--) {
            cin >> n >> p >> k;
            for(int i = 0; i <= k; i++) b[i] = 0;
            for(int i = 1; i <= n; i++) cin >> a[i];
            sort(a+1,a+n+1);
            int ans = 0;
            for(int i = 1; i < k; i++) {
                b[i] = b[i-1] + a[i];
                if(b[i] <= p) ans = i;
            }
            for(int i = 0; i < k; i++) {
                for(int j = i+k; j <= n; j+=k) {
                    b[i] += a[j];
                    if(b[i] <= p && j > ans) ans = j;
                }
            }
            cout << ans << endl;
        }
    }
    

    C题

    参加考试,0代表容易题,解出需要a分钟,1代表难题,解出需要b分钟,可以从任意时间s退出考试,n个题目,每个题目有个限制时间ti,如果要从s时间退出考试则必须把ti<=s的全部题目做完,求最多可以做几个题目; 把时间排序,然后贪心,把需要做的难题做完,在最大的做简单题

    struct node {
        ll ty,t;
    }a[MAXN];
    
    bool cmp(node a,node b) {
        return a.t < b.t;
    }
    ll sum[MAXN];
    
    int main() {
        int q,n,t,b,c;
        cin >> q;
        while(q--) {
            cin >> n >> t >> b >> c;
            for(int i = 0; i < n; i++) cin >> a[i].ty;
            for(int i = 0; i < n; i++) cin >> a[i].t;
            sort(a,a+n,cmp);
            a[n].t = t+1;
            ll time = 0;
            int res = 0;
            for(int i = n-1; i >= 0; i--) {
                sum[i] = res;
                if(a[i].ty == 0) res++;
            }
            int ans = 0;
            if(a[0].t) ans = min((a[0].t-1)/b,sum[0]);
            res = 0;
            for(int i = 0; i < n; i++) {
                if(a[i].ty == 0) time += b;
                else time += c;
                if(time < a[i+1].t) {
                    res = i+1; 
                    res += min((a[i+1].t-time-1)/b,sum[i]);
                    ans = max(ans,res);
                }
            }
            cout << ans << endl;
        }
        //system("pause");
        return 0;
    }
    

    听说有人想批斗我,没想到我早上去答辩了,哈哈哈哈

  • 相关阅读:
    从Prism中学习设计模式之Event Aggregator 模式
    Apache的HttpClient调用Https忽略证书校验
    SaltStack安装及API开启
    Java连接WebSocket服务忽略证书校验
    SpringBoot实现WebSocket服务
    MySQL主从复制搭建
    Matlab基础知识(持续更新中)
    FIFO基础知识
    图像常识知识
    VC调试记录(持续更新中)
  • 原文地址:https://www.cnblogs.com/ASLHZXY/p/12101959.html
Copyright © 2020-2023  润新知