美文网首页
A1037 Magic Coupon (25分)

A1037 Magic Coupon (25分)

作者: km15 | 来源:发表于2020-02-01 13:41 被阅读0次

    // A1037 Magic Coupon (25分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    /*
    题意:
    1、给一串数字,有正有负,再给一串数字,有正有负
    2、两两相乘,得出最大和
    题目给的是整数,1~10的5次方,不超过2的30次方也就是用过long?

    解法:贪心无疑,怎么实现是个问题
    1、排序,大到小,两两成绩,如果大于0相加,小于0排序
    2、

    learn && worng;
    1、错了一组
    2、思路不错,按从小到大排序,相乘
    3、代码要有处理正负数个数不同且为0的情况,就是两个数组元素分别大于0,或小于0
    4、在进行排序后去两个集合的最大正数时,取位置n - 1和m - 1,而不是min{n - 1, m - 1}
    5、在进行累加时候,不能以coupon[i] * product[i] > 0(负数))做条件,就一直循环到尾巴了!而是以occupy[i] < 0 && product[i] < 0(负数时),,occupy[i] > 0 && product[j] > 0(正数时)才对
    6、负数相乘时候,因为是从左边开始,可以用同一个i,正数需要用i和j开始,注意!
    */

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    long long occupy[100010], product[100010];
    
    bool cmp(long long a, long long  b) { //(!!!)这里超时了
        return a < b;
    }
    
    int main()
    {
        int n1,n2;
        cin >> n1;
        for (int i = 0;i < n1;++i) {
            cin >> occupy[i];
        }
    
        cin >> n2;
        for (int i = 0;i < n2;++i) {
            cin >> product[i];
        }
        sort(occupy, occupy + n1,cmp);
        sort(product, product + n2, cmp);
    
        int i = 0,j;
        long long ans = 0;
        while (i < n1 && i < n2 && occupy[i] < 0 && product[i] < 0) {
            ans += occupy[i] * product[i];
            i++;
       }
        i = n1 - 1;
        j = n2 - 1;
        while (i >= 0 && j >= 0 && occupy[i] > 0 && product[j] > 0) {
            ans += occupy[i] * product[j];
            i--;
            j--;
        }
    
        cout << ans << endl;
        return 0;
    }
    
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    long long occupy[100010], product[100010];
    
    bool cmp(int a, int b) {
        return a > b;
    }
    
    int main()
    {
        int n1,n2;
        cin >> n1;
        for (int i = 0;i < n1;++i) {
            cin >> occupy[i];
        }
    
        cin >> n2;
        for (int i = 0;i < n2;++i) {
            cin >> product[i];
        }
        sort(occupy, occupy + n1,cmp);
        sort(product, product + n2, cmp);
    
        long long temp = 0;
        long long ans = 0;
        for (int i = 0;i < n1;++i) {
            temp = occupy[i] * product[i]; //成绩
            if (temp > 0) ans += temp;
        }
    
        cout << ans;
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:A1037 Magic Coupon (25分)

          本文链接:https://www.haomeiwen.com/subject/uentxhtx.html