九度OJ 1334:占座位 (模拟)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:864
解决:202
- 题目描述:
-
sun所在学校的教室座位每天都是可以预占的。
一个人可以去占多个座位,而且一定是要连续的座位,如果占不到他所要求的这么多座位,那么他就一个座位也不要了。为了降低难度,每次分配座位按座位号从小到大查找,采用最先适配法分配座位。
- 输入:
-
输入有多组数据。
每组数据输入座位排数n,0<n<=100(座位的排列数相等,座位是按每行从左到右依次排序的),m( 0<m<=min(100,n*n) )个人。
然后输入k(0<k<=100),最后输入k个命令。
命令只有两种:
1.in id num(代表id,0<=id<m,要占num个座位,若占不到连续的num(0<num<=20)个座位表示该命令无效)
2.out id(代表id要释放他之前占的所有座位)
注意:如果id之前占过座还没释放那么之后他的in命令都是无效的,
如果id之前没占过座位那么他的out命令也是无效的。
- 输出:
-
对每个in命令输出yes或者no,如果命令有效则输出yes,无效则输出no。
在yes no后面只带有回车,不带其他任何字符。
- 样例输入:
-
4 10
9
in 1 7
in 2 3
in 3 3
in 3 3
in 4 3
out 2
in 5 6
out 3
in 5 6
- 样例输出:
-
yes
yes
yes
no
yes
no
yes
思路:
数据结构用了结构体+链表,比较符合这个题的特点。
这个题特别注意两个地方:
如果id之前占过座还没释放那么之后他的in命令都是无效的,
如果id之前没占过座位那么他的out命令也是无效的。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define N 100 typedef struct node {
int id;
int begin;
int end;
struct node *next;
} Person; Person *init(Person *head, int n)
{
head = (Person *)malloc(sizeof(Person));
head->id = -1;
head->begin = head->end = 0;
Person *tail = (Person *)malloc(sizeof(Person));
tail->id = tail->begin = tail->end = n+1;
head->next = tail;
tail->next = NULL;
return head;
} void print(Person *head)
{
while (head)
{
printf("%d %d %d\n", head->id, head->begin, head->end);
head = head->next;
}
} void insert(Person *head, int id, int num, int m)
{
if (id < 0 || id >= m)
{
printf("no\n");
return;
} Person *p0, *p;
p0 = head;
p = p0->next;
while (p != NULL)
{
if (p->id == id)
break;
p0 = p;
p = p0->next;
}
if (p != NULL)
{
printf("no\n");
return;
} p0 = head;
p = p0->next;
while (p != NULL)
{
if (p->id == id)
{
printf("no\n");
return;
}
if (p->begin - p0->end - 1 >= num)
break;
p0 = p;
p = p0->next;
}
if (p == NULL)
{
printf("no\n");
return;
} Person *pnew = (Person *)malloc(sizeof(Person));
pnew->id = id;
pnew->begin = p0->end + 1;
pnew->end = p0->end + num;
p0->next = pnew;
pnew->next = p;
printf("yes\n");
} void out(Person *head, int id, int m)
{
if (id < 0 || id >= m)
return;
Person *p0, *p;
p0 = head;
p = p0->next;
while (p != NULL)
{
if (p->id == id)
break;
p0 = p;
p = p0->next;
}
if (p == NULL)
{
return;
}
p0->next = p->next;
free(p);
} int main()
{
int n, m, k, i;
Person *head;
char op[5];
int id;
int num; while(scanf("%d%d%d", &n, &m, &k) != EOF)
{
n = n*n;
head = init(head, n);
//print(head);
for (i=0; i<k; i++)
{
scanf("%s%d", op, &id);
if (strcmp(op, "in") == 0)
{
scanf("%d", &num);
insert(head, id, num, m);
}
else
out(head, id, m);
//printf("\ni=%d\n", i);
//print(head);
}
}
return 0;
}
/**************************************************************
Problem: 1334
User: liangrx06
Language: C
Result: Accepted
Time:60 ms
Memory:912 kb
****************************************************************/
九度OJ 1334:占座位 (模拟)的更多相关文章
- 九度OJ 1179 阶乘(模拟)
题目1179:阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4526 解决:1315 题目描写叙述: 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2! ...
- 九度OJ 1177 查找 (模拟)
题目1177:查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5659 解决:1667 题目描写叙述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共同拥有 ...
- 九度OJ 打印日期 (模拟)
题目1186:打印日期 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4284 解决:1483 题目描写叙述: 给出年分m和一年中的第n天,算出第n天是几月几号. 输入: 输入包含两个整数 ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj 1003
前几天开刷九度oj,准备把做的题都放上,先放1003 题目1003:A+B 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:16923 解决:7029 题目描述: 给 ...
- 【九度OJ】题目1026:又一版 A+B 解题报告
[九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...
- 【九度OJ】题目1015:还是A+B 解题报告
[九度OJ]题目1015:还是A+B 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1015 题目描述: 读入两个小于10000的正整 ...
随机推荐
- XShell命令行使用
1.建立连接: 2.查看总体目录: 3.查看对应服务目录: 4.删除对应jar包后,再查看目录下文件: 5.上传对应的jar文件: 6.重启服务 7.查看服务日志: 8.mv old-name new ...
- Java 堆内存模型
堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 在 Java 中.堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ...
- python项目构建工具zc.buildout
转载:http://blog.csdn.net/u011630575/article/details/52940099 buildout简介 Buildout 是一个基于Python的构建工具, Bu ...
- zabbix分组报警
生产上需要在出现报警情况下,不同的主机发送报警给不同的用户 下面实例为分组为dev(开发组)和ops(运维组) 1.把主机进行分组 创建主机群组 配置-->主机群组-->创建主机群组,创建 ...
- es创建索引的格式,并初始化数据
es创建索引的格式,并初始化数据 学习了:https://www.imooc.com/video/15759 1, 创建格式 POST 127.0.0.1:9200/book/novel/_mappi ...
- Elasticsearch教程(六) elasticsearch Client创建
Elasticsearch 创建Client有几种方式. 首先在 Elasticsearch 的配置文件 elasticsearch.yml中.定义cluster.name.如下: cluster ...
- Haproxy 8种算法+Session共享
Haproxy有8种负载均衡算法(balance),分别如下: 1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法 2.balance static-rr # 根据权重, ...
- vue笔记二
七.列表渲染 1.示例 <ul id="example-2"> <li v-for="(item, index) in items"> ...
- 学习Opencv 2.4.9(二) ---操作像素
作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 本质上说一张图像就是由数值组成的矩阵.Opencv 2.x由 cv::Mat 这个数据结构来表示一 ...
- 把数据库里面的stu表中的数据,导出到excel中
# 2.写代码实现,把我的数据库里面的stu表中的数据,导出到excel中 #编号 名字 性别 # 需求分析:# 1.连接好数据库,写好SQL,查到数据 [[1,'name1','男'],[1,'na ...