当前位置: 首页 > article >正文

每日OJ题_牛客_chika和蜜柑_TopK_C++_Java

目录

牛客_chika和蜜柑_TopK

题目解析

C++代码

Java代码


牛客_chika和蜜柑_TopK

chika和蜜柑 (nowcoder.com)

描述:
        chika很喜欢吃蜜柑。每个蜜柑有一定的酸度和甜度,chika喜欢吃甜的,但不喜欢吃酸的。
        一共有n个蜜柑,chika吃k个蜜柑,将获得所吃的甜度之和与酸度之和。chika想获得尽可能大的甜度总和。如果有多种方案,她希望总酸度尽可能小。
        她想知道,最终的总酸度和总甜度是多少?


题目解析

        将每个橘子按照甜度由高到低排序,相同甜度的橘子按照酸度由低到高排序。然后提取排序后的前 k 个橘就可以了。

C++代码

#include <iostream>
#include <ostream>
#include <queue>
#include <utility>
#include <vector>
using namespace std;
struct cmp
{
	bool operator()(pair<int, int> p1, pair<int, int> p2) // 堆的比较和逻辑相反
	{
		if (p1.first > p2.first)
			return false;
		else if (p1.first == p2.first)
			return p1.second > p2.second;
		else
			return true;
	}
};
#define int long long
signed main()
{
	int n = 0, k = 0;
	cin >> n >> k;
	// vector<int> a(n), b(n);
	priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> qb;
	vector<int> a(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> a[i];
	}
	int x = 0;
	for (int i = 0; i < n; ++i)
	{
		cin >> x;
		qb.push({ x, a[i] });
	}
	// while(qb.size())
	// {
	// cout << qb.top().first << " " << qb.top().second << endl;
	// qb.pop();
	// }
	// cout << "-------------" << endl;
	int sum1 = 0, sum2 = 0;
	while (qb.size() && k--)
	{
		sum2 += qb.top().first;
		sum1 += qb.top().second;
		qb.pop();
	}
	cout << sum1 << " " << sum2 << endl;
	return 0;
}

Java代码

import java.util.*;
class Orange
{
    int a; // 酸度
    int b; // 甜度
    Orange(){}

    Orange(int a, int b)
    {
        this.a = a;
        this.b = b;
    }
}
public class Main
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), k = in.nextInt();
        Orange[] o = new Orange[n];
        for(int i = 0; i < n; i++)
        {
            o[i] = new Orange();
            o[i].a = in.nextInt();
        }
        for(int i = 0; i < n; i++)
        {
            o[i].b = in.nextInt();
        }

        // 排序
        Arrays.sort(o, (x, y) -> {
            if(x.b == y.b) 
                return x.a - y.a;
            return y.b - x.b;
        });

        // 提取结果
        long x = 0, y = 0;
        for(int i = 0; i < k; i++)
        {
            x += o[i].a;
            y += o[i].b;
        }
        System.out.println(x + " " + y);
    }
}

http://www.kler.cn/news/358214.html

相关文章:

  • 【Linux 从基础到进阶】AppArmor 安全模块应用指南
  • 【Next.js 项目实战系列】08-数据处理
  • Webpack一键打包多个环境
  • ajax嵌套ajax实现不刷新表单并向指定页面二次提交数据
  • MySQL上新:MySQL 9.1.0发布
  • Ubuntu下安装并初始化Git同时添加SSH密钥
  • 排序算法 —— 直接插入排序
  • Damn-Vulnerable-Drone:一款针对无人机安全研究与分析的靶机工具
  • 深度学习:终身学习(Life-Long Learning)详解
  • 域7:安全运营 第17章 事件的预防和响应
  • 【热门主题】000006 案例 探索云原生后端:创新与挑战
  • 手写Spring IOC-简易版
  • 集合框架14:TreeSet概述、TreeSet使用、Comparator接口及举例
  • 数据清洗(脚本)
  • 【Linux】从多线程同步到生产者消费者模型:多线程编程实践
  • 零代码快速开发智能体 |甘肃旅游通
  • 【str_replace替换导致的绕过】
  • Windows和Linux在客户端/服务端在安全攻防方面的区别
  • 路由表来源(基于华为模拟器eNSP)
  • web前端--html 5---qq注册