• codeforces 798 D. Mike and distribution(贪心+思维)


    题目链接:http://codeforces.com/contest/798/problem/D

    题意:给出两串长度为n的数组a,b,然后要求长度小于等于n/2+1的p数组是的以p为下表a1~ap的和乘以2

    大于a数组全部数的总和,b也是同理。

    题解:一看到这题一般会想到贪心,由于是二维的贪心,所以一定要想让一维有序,所以可以按照a先排一下序。

    得到排序后的数组a',先加上a'然后在依次两两选择b大的加上。

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int M = 1e5 + 10;
    struct TnT {
        int a , b , num;
    }T[M];
    bool cmp(TnT x , TnT y) {
        return x.a > y.a;
    }
    int main() {
        int n;
        cin >> n;
        for(int i = 0 ; i < n ; i++) {
            cin >> T[i].a;
            T[i].num = i + 1;
        }
        for(int i = 0 ; i < n ; i++) {
            cin >> T[i].b;
        }
        sort(T , T + n , cmp);
        if(n % 2 == 0) {
            cout << n / 2 + 1 << endl;
            cout << T[0].num;
            for(int i = 1 ; i < n - 2 ; i += 2) {
                if(T[i].b < T[i + 1].b) {
                    cout << ' ' << T[i + 1].num;
                }
                else {
                    cout << ' ' << T[i].num;
                }
            }
            cout << ' ' << T[n - 1].num << endl;
        }
        else {
            cout << n / 2 + 1 << endl;
            cout << T[0].num;
            for(int i = 1 ; i < n - 1 ; i += 2) {
                if(T[i].b < T[i + 1].b) {
                    cout << ' ' << T[i + 1].num;
                }
                else {
                    cout << ' ' << T[i].num;
                }
            }
            cout << endl;
        }
        return 0;
    }
    
    
  • 相关阅读:
    python(对象与实例属性)
    python(类和对象相关知识)
    python(面向对象设计)
    网络基础知识
    python(hashlib)
    子网掩码划分
    cmd命令
    Linux学习第一天:Linux常用快捷键
    python猜数字小游戏
    while语句
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/6752964.html
Copyright © 2020-2023  润新知