首页 > 其他分享 >P5250 木材仓库

P5250 木材仓库

时间:2023-03-15 10:36:53浏览次数:40  
标签:continue 仓库 木材 木头 取数 P5250 erase printf it2

萌新的第一篇题解

题意就是往一个仓库里放不同长度的木材。

然后维护这个仓库。

这里其实定义一个Set然后对它进行维护就好了。

关于Set这里不详细展开讲了,请自行百度了解。

AC代码如下,思路在注释里

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <set>
 4 using namespace std;
 5 set<int>s;//描述仓库
 6 set<int>::iterator it, it2;//定义两个迭代器用来描述位置
 7 int main() {
 8     int n = 0;
 9     scanf("%d", &n);
10     while (n--) {
11         int a, b;
12         scanf("%d%d", &a, &b);
13         if (a == 1) {
14             if (s.find(b) != s.end()) {
15                 printf("Already Exist\n");
16             }
17             else {
18                 s.insert(b);
19             }
20         }
21         if(a == 2){//注意需要一些特判
22             if (s.size() == 0) {
23                 printf("Empty\n");
24                 continue;
25             }
26             if (s.size() == 1) {//如果只有一个则只能拿出这一个
27                 it = lower_bound(s.begin(), s.end(), 0);
28                 printf("%d\n", *it);
29                 s.erase(*it);//erase()//取出
30                 continue;
31             }
32             if (s.find(b) != s.end()) {//如果已经有这个长度的木材就将其取出
33                 printf("%d\n", b);
34                 s.erase(b);
35                 continue;
36             }
37             else {//如果没有这个长度的木材
38                 it = lower_bound(s.begin(), s.end(), b);//找到第一个大于被取数的木头在哪里
39                 if (it == s.begin()) {//如果这个木头位于set首位,说明已经没有比被取数更小的木头,直接输出这个木头
40                     printf("%d\n", *it);
41                     s.erase(*it);
42                     continue;
43                 }
44                 if (it == s.end()) {//如果没有找到比被取数大的木头,则输出set最尾端的木头长度,即"it--"处的木头
45                     it--;
46                     printf("%d\n", *it);
47                     s.erase(*it);
48                     continue;
49                 }
50                 else{//如果被取数左右都有木头,
51                     it2 = it;//it2保存大的那个
52                     it--;//it保存小的那个
53                     if (b - *it > *it2 - b) {//比较他们与被取数之间的差,输出差值较小的那个,若一样,输出小的那个
54                         printf("%d\n", *it2);
55                         s.erase(*it2);
56                         continue;
57                     }
58                     if (b - *it <= *it2 - b) {
59                         printf("%d\n", *it);
60                         s.erase(*it);
61                         continue;
62                     }
63                 }
64             }
65         }
66     }
67     //完美结束
68     return 0;
69 }

 

标签:continue,仓库,木材,木头,取数,P5250,erase,printf,it2
From: https://www.cnblogs.com/Shiroha-Key/p/17217563.html

相关文章

  • 搭建android源代码gitlab仓库
    git设置#gitconfig--globalhttp.postBuffer1048576000manifest.xml原始的manifests.xml文件在源头代码repo仓库中#ls-l.repo/total40drwxrwxr-x5100110......
  • Maven简介和安装(配置中央仓库和本地仓库,IDEA配置Maven)
    简介Maven是使用Java语言编写的,是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型POM(ProjectObjectModel)项目对象模型。开发人员只需要做一些简单的配置,M......
  • Git 仓库7K stars!学Java开源项目austin要多久?
    我是3y,一年CRUD经验用十年的markdown程序员......
  • gitlab 服务端 hook,拦截糟糕的提交到仓库
    背景每当我接收一份新的代码,代码拿到手要做的第一件事就是gitlog,看看这份代码的提交记录,最近提交的情况,做了些什么。但往往看到的gitlog杂乱无章,不知道每次提交到......
  • 一次性克隆所有仓库
    将下方文件保存到一个"cloneAll.sh"文件中:#!/bin/bashif[-z"$1"];thenecho"waitingforthefollowingarguments:username+max-page-number"exit......
  • git 仓库迁移
    git仓库迁移场景1:git仓库无lfs仓库地址旧仓库地址http://gitee.com/original/git_repository.git目标仓库地址http://gitee.com/target/git_repository.......
  • Git使用系列03-->Git仓库创建
     前言只要不放下努力和追求,小草也有点缀春天的价值。学习技术真的不能断篇~一、git工作原理&流程1.1git工作流程图示如下:Workspace:工作区Index/Stage:暂存区Repositor......
  • Git配置ssh登录远程仓库
    一、在客户端生成密钥#-t指定密钥类型#-f指定生成密钥的文件名#-C注释,一般是填写用户名ssh-keygen-trsa-C"xxx"-fC:\Users\Administrator\.ssh\test二、......
  • 开发Vue组件并发布到npm仓库
    因业务需求,部分功能组件需要在多个项目中使用,为了避免直接复制代码,所以开发组件之后发布到npm仓库步骤:1:考虑以后也可能需要开发组件,所以我这边新建一个vue项目2:开发组......
  • 数据仓库基本概念
    数仓分层都分哪些层?一般来说,数据仓库我们可以分为如下5层:关于数仓分层,不同的公司分的层数是不一样的,并且数仓的每一层的命名也没有一个统一的标准,比如这一层就叫这个名......