【CSP试题回顾】201609-2-火车购票

CSP-201609-2-火车购票

解题思路

  1. 初始化座位映射:程序首先创建了一个20x5的二维数组setMap来表示车厢的座位分布,每一排有5个座位,总共20排。使用结构体MySet来表示每个座位,其中index字段代表座位编号,而empty字段表示该座位是否已经售出(0代表未售出,1代表已售出)。初始化过程中,将所有座位标记为未售出,并按照从1到100的顺序分配座位编号。

  2. 处理购票指令:程序接着读入一个整数n,表示有n条购票指令。然后对每一条指令进行处理,每个指令包含一个整数t,表示需要购买的票数。

  3. 查找连续空座:对于每个购票指令,程序首先尝试在车厢中找到连续的t个空座位(未售出)。这是通过遍历每一排座位并统计连续未售出座位的数量来实现的。如果找到足够的连续空座,就将这些座位标记为已售出,并打印出这些座位的编号。

  4. 分配非连续座位:如果没有找到足够的连续空座,算法将转而在车厢中寻找任何未售出的座位,直到满足购票数量t。找到后,也将这些座位标记为已售出,并打印出座位的编号。

  5. 打印座位编号:无论是找到连续的座位还是非连续的座位,程序都会打印出被分配的座位的编号,并且每条指令处理完毕后都会换行。

完整代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct MySet
{
	int index;
	bool empty; // 0-未售 1-已售
};

vector<vector<MySet>>setMap(20, vector<MySet>(5));
int n,t, setI = 1;

int main() {
	for (auto& it : setMap) {
		for (auto& jt : it) {
			jt.index = setI, jt.empty = 0;
			setI++;
		}
	}
	cin >> n;
	for (size_t i = 0; i < n; i++)
	{
		cin >> t;
		bool canSell = 0; // 是否连续的票可以售出
		for (size_t i1 = 0; i1 < setMap.size(); i1++)
		{
			int emptySet = 0;
			for (size_t i2 = 0; i2 < setMap[i1].size(); i2++) // 查找是否有空座
			{
				if (!setMap[i1][i2].empty) emptySet++;
				if (emptySet == t) {
					canSell = 1;
					break;
				}
			}
			if (canSell) // 开始收票
			{
				for (size_t i2 = 0, i3 = 0; i2 < setMap[i1].size(); i2++)
				{
					if (!setMap[i1][i2].empty) {
						cout << setMap[i1][i2].index << " ";
						setMap[i1][i2].empty = !setMap[i1][i2].empty;
						i3++;
					}
					if (i3 == t)break;
				}
			}
			if (canSell) {
				cout << endl;
				break;
			}
		}
		if (!canSell) // 没有连续的票可以出售
		{
			int sellCount = 0;
			for (auto& it : setMap) {
				for (auto& jt : it) {
					if (!jt.empty)
					{
						cout << jt.index << " ";
						jt.empty = !jt.empty;
						sellCount++;
					}
					if (sellCount == t)break;
				}
				if (sellCount == t)break;
			}
			cout << endl;
		}
	}
	return 0;
}

请添加图片描述

相关推荐

  1. CSP试题回顾】202303-2-垦田计划(优化)

    2024-03-15 17:58:02       50 阅读
  2. CSP试题回顾】202209-2-何以包邮?(优化)

    2024-03-15 17:58:02       36 阅读
  3. CSP试题回顾】201912-2-回收站选址(优化)

    2024-03-15 17:58:02       39 阅读
  4. CSP试题回顾】202104-2-邻域均值(优化)

    2024-03-15 17:58:02       39 阅读
  5. csp 201609-4

    2024-03-15 17:58:02       63 阅读
  6. CCF-CSP 201809-2 买菜 C++满分题解

    2024-03-15 17:58:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 17:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 17:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 17:58:02       82 阅读
  4. Python语言-面向对象

    2024-03-15 17:58:02       91 阅读

热门阅读

  1. ubuntu docker-compose 编排容器并且设置自启动

    2024-03-15 17:58:02       45 阅读
  2. 安卓实现沉浸式安卓状态栏实现

    2024-03-15 17:58:02       40 阅读
  3. 实景剧本杀小程序开发搭建

    2024-03-15 17:58:02       44 阅读
  4. Spring Boot写一个简单的PDF到Word的转换程序

    2024-03-15 17:58:02       41 阅读
  5. LinearLayout和RelativeLayout对比

    2024-03-15 17:58:02       48 阅读
  6. 利益相关者理论(stakeholder theory)

    2024-03-15 17:58:02       39 阅读
  7. 简单聊一下 Python asyncio

    2024-03-15 17:58:02       42 阅读
  8. 2085. 统计出现过一次的公共字符串

    2024-03-15 17:58:02       37 阅读
  9. MySQL--索引常见面试题详解

    2024-03-15 17:58:02       47 阅读
  10. Python中,如何检查一个变量是否存在?

    2024-03-15 17:58:02       40 阅读
  11. 【Android】源码中的单例模式

    2024-03-15 17:58:02       35 阅读
  12. 服务器通常会遭到哪些攻击手段?

    2024-03-15 17:58:02       42 阅读