2023年10月31日总结

2023年10月31日总结

混氏新子 蒟蒻

前言

今天就是 10 月的最后一天啦。还是很紧张。noip 看起来没有几天了。有一点点感伤,可能也是有一点点秋天的缘故吧。要放松放松。心平气和。嘻嘻。就要 11 月了,要穿的衣服也将会越来越多了,冬天也不远了。上周的今天是霜降,到考 noip 那周差不多就已经立冬了。看样子今年又要过去了。还有多久才能毕业呢?不要急,会很远,会很近。哈哈,日子也就一天一天过去了,虽然看起来我并没有什么收获,但是却是每天都是崭新的自己。嘻嘻,每天过得也都很平淡但很充实。话说,最近看到,有一部新番,叫 “葬送的芙蓉莲”,据说风评很好,看起来不累,有时间可以看看。《间谍过家家》也出第二季了,这两部比较感兴趣。

说回正题,话说什么是正题呢?我也不知道啊哈哈。我也不知道该写写啥,嘻嘻。总之想写啥就写啥哈哈。话说今天我们学校开运动会了,彩排。下面一直很热闹。我们在上面。有一点点吵,但是下面的人一定很开心吧!我们应该是没有参加运动会的机会了吧呼呼,还是有一点点可惜。但是十二月份听说有合唱比赛,还是很感兴趣的,希望能参加吧。

还有一件事,我貌似还没有说回正题——但是没有关系,今天是万圣夜,虽然对于中国这边来说没有什么影响,但还是希望西方的友人们节日快乐。还有就是,听说 steam 打折了,但是我还是不是很想花钱。

说回我自己(但不是正题),最近有一种轻松的累,嘻嘻,其实也还好。ee。好啦,不瞎扯了,来说说今天的题目吧。

早上

早上搞了一道大模拟,模拟电梯,还挺好玩的,写起来是每一步都有顺序的,很有趣。然后还有第二道题,叫夜宵二号,有点复杂,没有做出来,好可惜。link 。由于正片太水了,所以把这道题的代码贴一下,我觉得还是比较清晰的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <bits/stdc++.h>
using namespace std;
#define mp2 make_pair
#define mp(x, y, z) mp2(mp2(x, y), z)
const char inform[6][128] =
{"%02d:%02d The elevator starts to move up from floor %d.\n",
"%02d:%02d The elevator starts to move down from floor %d.\n",
"%02d:%02d The elevator stops at floor %d.\n",
"%02d:%02d %d people leave the elevator.\n",
"%02d:%02d %d people enter the elevator.\n"};
struct reques {
int t, s, d;
reques(int t = 0, int s = 0, int d = 0): t(t), s(s), d(d) {}
}a[110];
struct elevator {
bool is_free, is_run;
int floor, direc; //1 0 -1
list<reques> ren;
elevator() {
is_free = true;
floor = direc = 0;
is_run = false;
}
}elev;
list<reques> quer[110];
int k, n, p;
int tim;
int solvednum;
bool checkend() {
return solvednum == n;
}
int main() {
scanf("%d%d%d", &k, &n, &p);
elev.floor = k;
for (int i = 1; i <= n; ++i) {
scanf("%d%d%d", &a[i].t, &a[i].s, &a[i].d);
}
int qq = 1;
while (!checkend()) {
while (qq <= n && a[qq].t == tim) {
quer[a[qq].s].emplace_back(a[qq]);
++qq;
}
if (elev.is_free) {
vector<reques> q;
for (int i = 1; i <= 100; ++i) {
for (auto j : quer[i]) q.emplace_back(j);
}
if (q.empty()) goto nxt;
sort(q.begin(), q.end(), [&](auto x, auto y){return mp(x.t, (x.s != elev.floor), x.s == elev.floor? x.s > x.d : x.s < elev.floor) < mp(y.t, (y.s != elev.floor), y.s == elev.floor? y.s > y.d : y.s < elev.floor);});
elev.is_free = false;
elev.direc = (q.front().s == elev.floor ? (q.front().d > q.front().s ? 1 : -1) : (q.front().s > elev.floor ? 1 : -1));
}
nxt:
if (!elev.is_free) {
int numxdt = 0;
for (auto i : elev.ren) {
if (i.d == elev.floor) {
++numxdt;
}
}
if (numxdt) {
if (elev.is_run) {
elev.is_run = false;
printf(inform[2], tim / 60, tim % 60, elev.floor);
}
printf(inform[3], tim / 60, tim % 60, numxdt);
for (auto i = elev.ren.begin(); i != elev.ren.end();) {
if (i -> d == elev.floor) {
i = elev.ren.erase(i);
} else {
++i;
}
}
solvednum += numxdt;
goto ed;
}
int sdt = 0;
for (auto i : quer[elev.floor]) {
if ((i.d - i.s) * elev.direc > 0) ++sdt;
}
if ((int)elev.ren.size() < p && sdt) {
sdt = min(sdt, p - (int)elev.ren.size());
if (elev.is_run) {
elev.is_run = false;
printf(inform[2], tim / 60, tim % 60, elev.floor);
}
printf(inform[4], tim / 60, tim % 60, sdt);
for (auto i = quer[elev.floor].begin(); i != quer[elev.floor].end() && sdt;) {
if ((i -> d - i -> s) * elev.direc > 0) {
elev.ren.emplace_back(*i);
i = quer[elev.floor].erase(i);
--sdt;
} else {
++i;
}
}
goto ed;
}
if (!elev.is_run) {
if (elev.direc > 0) {
printf(inform[0], tim / 60, tim % 60, elev.floor);
} else {
printf(inform[1], tim / 60, tim % 60, elev.floor);
}
}
elev.is_run = 1;
elev.floor += elev.direc;
}
ed:
if (!elev.is_free) {
bool flg = 0;
for (int i = elev.floor + elev.direc; i > 0 && i <= 100; i += elev.direc) {
if (quer[i].size()) {
flg = 1;
break;
}
}
if (!flg)
for (auto i : quer[elev.floor]) {
if ((i.d - i.s) * elev.direc > 0 && (int)elev.ren.size() < p) {
flg = 1;
break;
}
}
if (!elev.ren.size() && !flg) {
elev.direc = -elev.direc;
flg = 0;
for (int i = 1; i <= 100; ++i) {
if (quer[i].size()) {
flg = 1;
break;
}
}
if (!flg) elev.is_free = 1;
}
}
++tim;
}
return 0;
}

下午

下午做 noip 真题,复习了一下之前做过的题目,挺好的,哈哈,还是很有难度。

总结

又度过一天啦!希望最后能有一个完美的结局。

  • 标题: 2023年10月31日总结
  • 作者: 混氏新子
  • 创建于 : 2023-10-31 22:48:15
  • 更新于 : 2023-10-31 22:57:00
  • 链接: https://blog.huasushis.cn/2023/2023年10月31日总结/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
2023年10月31日总结