Peter算法小课堂—自定义容器

太戈编程第308题

暴力法

cin>>n>>m;
for(int i=0;i<n;i++) cin>>name[i]>>year[i];
for(int i=0;i<m;i++){
	int x;
	string y;
	cin>>x>>y;
	int OK=0;
	for(int j=0;j<n;j++){
		if(name[j]==y&&year[j]==x){
			OK=1;
			break;
		}
	}
	cout<<OK<<" ";
}

这个算法复杂度为O(nm),显然有更快的算法

自定义类型

 但是,这样写有个很危险的错误,如下

#include <bits/stdc++.h>
using namespace std;
struct dog{
	string name;
	int year;
};
int main(){
	set<dog> s;
	dog a,b;
	a.name="mike";a.year=2020;
	b.name="wangcai";b.year=2019;
	s.insert(a);
	s.insert(b);
	return 0;
}

运行出来是这样的,

 原因很简单,因为set的功能是排序、去重,然而结构体排序要加上“.",所以会报错

改后代码,

#include <bits/stdc++.h>
using namespace std;
struct dog{
	string name;
	int year;
	bool operator<(const dog&d)const {
		if(year<d.year) return 1;
		if(year>d.year) return 0;
		if(name<d.name) return 1;
		return 0;
	}
};
int main(){
	set<dog> s;
	dog a,b;
	a.name="mike";a.year=2020;
	b.name="wangcai";b.year=2019;
	s.insert(a);
	s.insert(b);
	return 0;
}

那么,回到原题,代码该怎么写呢?

#include <bits/stdc++.h>
using namespace std;
struct dog{
	string name;
	int year;
	bool operator<(const dog&d)const {
		if(year<d.year) return 1;
		if(year>d.year) return 0;
		if(name<d.name) return 1;
		return 0;
	}
};
int main(){
	set<dog> s;
	dog d;
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>d.name>>d.year;
		s.insert(d);
	}
	for(int i=0;i<m;i++){
		cin>>d.year>>d.name;
		if(s.count(d)) cout<<"1";
		else cout<<"0";
	}
	return 0;
}

太戈编程第1497题

无set

#include <bits/stdc++.h>
using namespace std;
const int N=100009;
struct student{
	int id,score;
	bool operator<(const student&b)const {
		if(score>b.score) return 1;
		if(score<b.score) return 0;
		if(id<b.id) return 1;
		return 0;
	}
};
student f[N];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>f[i].score;
		f[i].id=i;
	}
	sort(f+1,f+1+n);
	for(int i=1;i<=n;i++){
		cout<<f[i].id<<" "<<f[i].score<<endl;
	}
	return 0;
}

有set

#include <bits/stdc++.h>
using namespace std;
const int N=100009;
struct student{
	int id,score;
	bool operator<(const student&b)const {
		if(score>b.score) return 1;
		if(score<b.score) return 0;
		if(id<b.id) return 1;
		return 0;
	}
};
int main(){
	int n;
	cin>>n;
	set<student> s;
	student x;
	for(int i=0;i<n;i++){
		cin>>x.score;
		x.id=i+1;
		s.insert(x);
	}
	set<student>::iterator it;
	for(it=s.begin();it!=s.end();it++)
		cout<<(*it).id<<" "<<(*it).score<<endl;
	return 0;
}

当然这个代码也有高级版,但要升级到c++14,如下

//不推荐使用,OJ好像不行
#include <bits/stdc++.h>
using namespace std;
const int N=100009;
struct student{
	int id,score;
	bool operator<(const student&b)const {
		if(score>b.score) return 1;
		if(score<b.score) return 0;
		if(id<b.id) return 1;
		return 0;
	}
};
int main(){
	int n;
	cin>>n;
	set<student> s;
	int x;
	for(int i=0;i<n;i++){
		cin>>x;
		s.insert({i+1,x});
	}
	set<student>::iterator it;
	for(it=s.begin();it!=s.end();it++)
		cout<<(*it).id<<" "<<(*it).score<<endl;
	return 0;
}

太戈编程第309题

大家认真敲代码15min,15min后开讲

 

#include <bits/stdc++.h>
using namespace std;
struct ren{
	int x,id;
	bool operator<(const ren&b)const{
		if(x<b.x) return 1;
		if(x>b.x) return 0;
		if(id<b.id) return 1;
		return 0;
	}
};
int main(){
	int n;
	cin>>n;
	set<ren> s;
	set<ren>::iterator it;
	ren d;
	for(int i=1;i<=n;i++){
		cin>>d.x;
		d.id=i;
		s.insert(d); 
	}
	set<int> ok;
	for(int i=1;i<=n;i++){
		it=s.begin();
		d.x=(*it).x+3;
		d.id=(*it).id;
		s.erase(it);
		s.insert(d);
		ok.insert(d.id);
	}
	cout<<n-ok.size()<<endl;
	return 0;
}

希望这些对大家有用,三联必回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139941.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WH4530A可检测0-100cm环境光+距离检测功能

台湾旺泓推出的WH4530A是一款结合了先进环境光传感器&#xff08;ALS&#xff09;先进接近传感器&#xff08;PS&#xff09;和高效率的红外LED灯三合一为一体的光距感接近传感器&#xff1b;可测距范围0-100cm;采用I2C接口&#xff0c;可实现超高灵敏度、精准测距检测范围广等…

介绍公司的软文怎么写

软文推广成为企业提高知名度和市场竞争力的主要方式之一&#xff0c;通过软文推广&#xff0c;公司能够被更多消费者熟知并在他们心中留下深刻印象&#xff0c;一篇好的软文&#xff0c;不仅能传递公司的产品和服务信息&#xff0c;还可以传递出公司的理念、文化等&#xff0c;…

【Linux】进程等待

文章目录 tips一、进程等待是什么&#xff1f;二、为什么要有进程等待&#xff1f;三、怎么做到进程等待&#xff1f;先看看什么是进程等待wait和waitpidstatus参数options参数非阻塞轮询 进程等待的原理 总结 tips 下面的代码可以循环检测进程。 while :; do ps ajx | head …

ASK、PSK、FSK的调制与解调

ASK、PSK、FSK的调制与解调 本文主要涉及数字信号的调制与解调&#xff0c;内容包括&#xff1a;2ASK、2PSK、2FSK的调制与解调以及频谱分析 关于通信原理还有其他文章可参考&#xff1a; 1、信息量、码元、比特、码元速率、信息速率详细解析——实例分析 2、模拟系统的AM信号的…

在个人简历中为什么要写个人优势?

问题描述&#xff1a; 在个人简历中为什么要写个人优势&#xff1f; 解决方案&#xff1a; 在个人简历中写个人优势的目的是突出你作为求职者的独特优势和价值&#xff0c;一段精简且亮眼的介绍能够快速抓住HR的眼球&#xff0c;判断你与岗位的契合度&#xff0c;进而对你产生…

2023年阿里云服务器最新日常价、活动价格、可使用优惠券金额及券后价格参考

阿里云服务器最新实际购买价格参考&#xff0c;轻量应用服务器2核2G3M带宽配置日常价720.00元/1年&#xff0c;最新活动价格为87元/1年&#xff0c;订单满300元以上即可使用满减优惠券&#xff0c;例如经济型e实例2核4G2M带宽日常价格为1802.40元&#xff0c;最新的活动价格为8…

归并排序详解

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&a…

彭州市民政局“四个聚焦” 推动未成年人保护工作

聚焦机制完善。以“六大保护”为主导&#xff0c;聚焦“27&#xff08;市级部门&#xff09;13&#xff08;镇、街道&#xff09;”整体联动&#xff0c;定期开展信息交流会、跨部门协同工作培训会等活动&#xff0c;不断健全协调机制、完善协同体系&#xff0c;进一步提升全市…

监控和数据采集软件架构和详细设计

介绍 监控和数据采集软件通过提供实时监控、数据收集和分析功能&#xff0c;在各个行业中发挥着至关重要的作用。这些软件应用程序可帮助企业收集有价值的见解、优化流程并做出明智的决策。在本文中&#xff0c;我们将探讨监测和数据采集软件的软件架构、编程技术和详细设计规范…

SpringBoot3基础特性

SpringBoot3基础特性 SpringApplication 自定义banner 类路径添加banner.txt或设置spring.banner.location就可以定制banner推荐网站:Spring Boot banner在线生成工具&#xff0c;制作下载英文banner.txt,修改替换banner.txt文字实现自定义。 提示&#xff1a; 可以通过修改配…

【C++ 学习 ㊱】- 智能指针详解

目录 一、为什么需要智能指针&#xff1f; 二、智能指针的原理及使用 三、auto_ptr 3.1 - 基本使用 3.2 - 模拟实现 四、unique_ptr 4.1 - 基本使用 4.2 - 模拟实现 五、shared_ptr 5.1 - 基本使用 5.2 - 模拟实现 六、weak_ptr 6.1 - shared_ptr 的循环引用问题 …

Amazon Bedrock | 大语言模型CLAUDE 2体验

这场生成式AI与大语言模型的饥饿游戏&#xff0c;亚马逊云科技也参与了进来。2023年&#xff0c;亚马逊云科技正式发布了 Amazon Bedrock&#xff0c;是客户使用基础模型构建和扩展生成式AI应用程序的最简单方法&#xff0c;为所有开发者降低使用门槛。在 Bedrock 上&#xff0…

【PG】PostgreSQL 预写日志(WAL)、checkpoint、LSN

目录 预写式日志&#xff08;WAL&#xff09; WAL概念 WAL的作用 WAL日志存放路径 WAL日志文件数量 WAL日志文件存储形式 WAL日志文件命名 WAL内容 检查点&#xff08;checkpoint&#xff09; 1 检查点概念 2 检查点作用 触发检查点 触发检查点之后数据库操作 设置合…

Spark SQL 每年的1月1日算当年的第一个自然周, 给出日期,计算是本年的第几周

一、问题 按每年的1月1日算当年的第一个自然周 (遇到跨年也不管&#xff0c;如果1月1日是周三&#xff0c;那么到1月5号&#xff08;周日&#xff09;算是本年的第一个自然周, 如果按周一是一周的第一天) 计算是本年的第几周&#xff0c;那么 spark sql 如何写 ? 二、分析 …

C++实现查找连通域

目录 一、概述 1.1、四连通域算法 1.2、八连通域算法 1.3、种子填充法 二、代码 一、概述 图像处理中&#xff0c;查找连通域的算法是图像分割的重要方法之一。它能够将一幅图像分成若干个不重叠的区域&#xff0c;每个区域内部像素具有相似的性质&#xff0c;而不同区域…

重磅:RHCA架构师新班要开课啦:《OpenShift 企业管理(DO280)》

OpenShift 即将开班 想了解的可提前咨询 课程介绍 学习如何安装、配置和管理实例OpenShift企业版管理 (DO280) 旨在帮助系统管理员为安装、配置和管理红帽OpenShift企业版实例做好准备。OpenShift企业版是一款红帽的平台即服务(PaaS)产品&#xff0c;通过使用容器技术为各类…

Linux Zabbix企业级监控平台+cpolar实现远程访问

文章目录 前言1. Linux 局域网访问Zabbix2. Linux 安装cpolar3. 配置Zabbix公网访问地址4. 公网远程访问Zabbix5. 固定Zabbix公网地址 前言 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。能监视各种网络参数&#xff0c;保证服务器系…

Linux系统上配置MySQL自动备份

1、编写Shell脚本&#xff0c;并保存为.sh文件 #!/bin/bash# 获取当前日期和时间 current_date$(date %Y%m%d) current_time$(date %H%M%S)# 设置备份文件名 path"/usr/local/mysql5.7/bak" bakFileName"dbname_backup_${current_date}_${current_time}.sql&qu…

ChineseChess.2023.11.13.01

中国象棋残局模拟器ChineseChess.2023.11.13.01

树木二维码怎么生成

众所周知&#xff0c;二维码在当今社会已经普及应用。而制作树木二维码也开始受到人们的关注。那么&#xff0c;如何制作树木二维码呢&#xff1f; 树木二维码管理系统的功能 1、基本信息查看&#xff1a;为每棵树木生成唯一的二维码&#xff0c;该二维码扫码后可以了解树木的种…