热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

G.OfZorcsandAxes----贪心+STL

转载地址:http:www.cnblogs.comliuweimingcprogramp6044994.html?utm_sourceitdadao&utm_mediumr

转载地址:http://www.cnblogs.com/liuweimingcprogram/p/6044994.html?utm_source=itdadao&utm_medium=referral


大牛的博客,把set用到出神入化


以下来自大牛:

一开始还以为要用二分图去做,但是复杂度也太高了,O(n * m)的话直接爆炸。

考虑贪心,考虑第i个东西优先选一个能选的,而且这个东西的值尽量小。

就是如果要<3, 3>的话,我希望找到有序对,其中x和y都最接近3, 3

那么这里就涉及到同时排序两个数,就是这两个数的优先级一样,而且二分找的时候也要同时比较两个数了

一开始还想用set的,但是这样重载运算符的set我没用过,重载成 return a 不知道为何,希望有大牛指点一二。

那么可以这样去想,先对x排序,如果x相同再对y排序,全部相同就按照被选的那个优先,就是m那堆数字有先。

这样做有什么好处呢?可以维护一个set,每次如果是m那堆数字的话,就扔去set那里,如果不是,就从set里面找,找的时候只需要比较y就行了,因为x已经保证严格成立了。

最后说一下set那里,自己写一个比较函数的话,就要考虑重复的元素,因为重复的元素会被自动删除的,但是我本来结构体那里就有了个id这个值,id是保证不同的了,id是我用来记录答案的,但是它还是去重了。现在试了发现,如果想id不同,就当成不同的元素的话,就要在你的cmp那里把id加上去比较,

这里坑了我太久了,一直wa9、

给个数据吧

6
2 5
4 3
4 3
4 3
4 3
4 2
6
5 6
4 3
4 3
4 2
4 3
4 3


代码:

#include 
#include 
#include 
#include 
#include 
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include 
#include 
#include 
#include 
#include 
#include 
#include 
const int maxn = 5e5 + 20;
struct node {
    int a, b, id;
    int flag;
    node() {}
    node(int aa, int bb, int iidd, int Orz_zk) : a(aa), b(bb), id(iidd), flag(Orz_zk) {}
    bool operator <(const struct node & rhs) const {
        if (a != rhs.a) return a ss;
int ans[maxn];
void work() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> arr[i].a >> arr[i].b;
        arr[i].id = i;
        arr[i].flag = 0;
    }
    int m;
    cin >> m;
    for (int i = 1; i <= m; ++i) {
        cin >> arr[i + n].a >> arr[i + n].b;
        arr[i + n].flag = 1;
        arr[i + n].id = i;
    }
    sort(arr + 1, arr + 1 + n + m);
//    for (int i = m + n; i >= 1; --i) {
//        cout < :: iterator it;
    for (int i = m + n; i >= 1; --i) {
//        for (it = ss.begin(); it != ss.end(); ++it) {
//            cout <a <<" " <b <<" " <id <id;
        ss.erase(it);
    }
    for (int i = 1; i <= n; ++i) {
        if (ans[i] == 0) while(1);
        cout < 
 



推荐阅读
  • 本文详细介绍如何在 Windows 环境下安装 Ubuntu 12.04 版本的 Linux 操作系统,包括必要的软件下载、配置步骤以及注意事项。 ... [详细]
  • 在Windows Server 2008 R2上配置IIS FTP服务
    本文详细介绍了如何在Windows Server 2008 R2操作系统上通过IIS配置FTP服务的过程,包括服务器角色的选择与安装、FTP站点的创建以及必要的服务和防火墙设置检查。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • JavaScript:简洁与复杂之间的平衡
    本文探讨了在编写JavaScript教程时,如何在保持内容简洁的同时,确保初学者能够理解并应用实际开发中的复杂问题。文章通过具体示例分析了不同层次的JavaScript代码实现。 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • 深入解析IGMP各版本特性及其演进
    本文详细探讨了Internet组管理协议(IGMP)的不同版本,包括IGMPv1的基础功能、IGMPv2的增强特性和IGMPv3的重要改进。特别分析了IGMPv3如何支持特定源组播(SSM)模型,并介绍了各版本之间的主要差异。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • 本文旨在分享HTML标签整理的经验,帮助读者更好地理解和应用HTML标签,提升前端开发的专业性和语义化水平。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • Java与JSON互转:实现JSON到Java对象及Java对象到JSON的转换
    本文详细介绍了如何在Java中实现JSON数据与Java对象之间的相互转换,包括代码示例和常见问题解决方法。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • Python数据类型6 字典
    字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包 ... [详细]
author-avatar
panda光光_897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有