【ccf-csp题解】第3次csp认证-第三题-集合竞价-枚举

news/2024/5/18 21:29:24 标签: 算法, 枚举, c++, ccf-csp

题目描述

思路讲解

本题数据量较小,所以只需要让时间复杂度控制在O(n^2)就可以满分通过,难度较低

可以用结构体数组事先存下每一个记录的信息,结构体如下:

其中bool值del可以表示这份记录是否已经被删

如何删去一个记录?代码如下:

else if(str=="cancel")
{
	int id;
	scanf("%d",&id);
	record[id].del=true;
	record[++cnt].del=true;
}

其中id表示想要删除的记录行号,但是为什么下面有一个“record[cnt++].del=true”呢,这是因为若是有多个cancel,你若不加这一行,n(行数)就不会增加,后边的cancel删除的时候,可能就删错行了

数据全部输入之后,只需要对于每一个出现过的价格,在保证记录没有被删的前提下,做一个二重遍历即可

满分代码

#include<iostream>
using namespace std;
const int N=5010;
typedef long long LL;
int cnt;
struct Record{
	int type;//buy:1  sell:2
	double p;
	int s;
	bool del;
}record[N];
int main()
{
	string str;
	while(cin>>str)
	{
		if(str=="buy")
		{
			double p;
			int s;
			scanf("%lf%d",&p,&s);
			record[++cnt]={1,p,s,false};
		}
		else if(str=="sell")
		{
			double p;
			int s;
			scanf("%lf%d",&p,&s);
			record[++cnt]={2,p,s,false};
		}
		else if(str=="cancel")
		{
			int id;
			scanf("%d",&id);
			record[id].del=true;
			record[++cnt].del=true;
		}
	}
	LL ress=0;
	double resp;
	for(int i=1;i<=cnt;i++)
	{
	    if(!record[i].del)
	    {
	        double p=record[i].p;
    		LL s1=0,s2=0;
    		for(int j=1;j<=cnt;j++)
    		if(!record[j].del)
    		if(record[j].type==1&&record[j].p>=p)s1+=record[j].s;
    		else if(record[j].type==2&&record[j].p<=p)s2+=record[j].s;
    		if(ress<min(s1,s2)||ress==min(s1,s2)&&resp<record[i].p)ress=min(s1,s2),resp=p;
	    }
	}
	printf("%.2lf %lld",resp,ress);
	return 0;
}

 


http://www.niftyadmin.cn/n/5015705.html

相关文章

怎样吃透一个java项目?

前言 对于刚开始看视频敲代码&#xff0c;最忌讳的便是一上来就完全照着视频做&#xff0c;这么做就算完完全全的跟着视频做出来一个项目&#xff0c;始终都无法将里面具体的知识化为己有&#xff0c;单纯来说只是简单的复刻&#xff0c;视频的作者本身是不会对他在做该项目过…

代码随想录训练营第47天休息日|210.课程表II

代码随想录训练营第47天休息日|210.课程表II 210.课程表II思路代码 总结 210.课程表II 思路 拓扑排序 将入度为0的节点放入队列&#xff0c;将队列中点的入度置为-1&#xff0c;当前访问点的后继入度减1&#xff0c; 迭代直至没有入度为0的节点 仍存在入度大于0的节点&#x…

使用React18+Ts创建项目

1. 创建项目 首先&#xff0c;使用create-react-app工具创建一个新的React项目&#xff1a; npx create-react-app 项目名 --template typescript2. 安装依赖项 使用脚手架创建项目后&#xff0c;自带react-dom等依赖项&#xff0c;但react中的所用的路由方法是react-router…

2023.9.6 Redis 的基本介绍

目录 Redis 的介绍 Redis 用作缓存和存储 session 信息 Redis 用作数据库 消息队列 消息队列是什么&#xff1f; Redis 用作消息队列 Redis 的介绍 特点&#xff1a; 内存中存储数据&#xff1a;奠定了 Redis 进行访问和存储时的快可编程性&#xff1a;支持使用 Lua 编写脚…

java 中 StringBuilder类经常用的方法,请举几个案例

当使用 StringBuilder 类时&#xff0c;以下是几个常用的方法示例&#xff1a; append()&#xff1a;用于在字符串的末尾追加内容。 StringBuilder sb new StringBuilder(); sb.append("Hello"); sb.append(" "); sb.append("World"); String r…

C++数据结构X篇_10_C++栈的应用-中缀转后缀

中缀表达式就是我们平时运算表达式&#xff0c;其特点是运算符总是处于两个运算对象之间。但是该表达式计算机处理起来较为麻烦&#xff0c;会将其转写成后缀表达式&#xff0c;后缀表达式也叫逆波兰表达式&#xff0c;后缀表达式的特点是每个运算符都置于两个运算对象之后。此…

【C++深入浅出】类和对象中篇(六种默认成员函数、运算符重载)

目录 一. 前言 二. 默认成员函数 三. 构造函数 3.1 概念 3.2 特性 四. 析构函数 4.1 概念 4.2 特性 五. 拷贝构造函数 5.1 概念 5.2 特性 六. 运算符重载 6.1 引入 6.2 概念 6.3 注意事项 6.4 重载示例 6.5 赋值运算符重载 6.6 前置和后置运算符重载 七. c…

第7节-PhotoShop基础课程-视图调整

文章目录 前言1.视图菜单1. 视图操作1.校样颜色 Ctrl Y2.色域警告 Ctrl Shift Y3.像素长宽比 2.显示操作1.大小调整1.Alt 滚轮2.放大选项3.按空格 出现抓手 2.按屏幕大小缩放 Ctrl 0(数字0)3.按实际大小缩放 Ctrl 11.标准屏幕模式2.带有菜单栏的全屏模式3.全屏模式4.只显…