专栏文章

20250829模拟赛游记

生活·游记参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio2o05m
此快照首次捕获于
2025/12/02 12:22
3 个月前
此快照最后确认于
2025/12/02 12:22
3 个月前
查看原文

20250829 模拟赛游记

比赛介绍:

  • 本次比赛共五题,时长 33 小时,难度正常(对我来说)
  • 比赛时间为 20252025882929 日早上八点半至十一点半。
  • 需要写文件读写(CSP 标准)

试题分析

1. 比赛时间(ctiming)

题目内容:
  • 已知比赛开始时间为 111111111111 分。
  • 现输入三个正整数分别表示比赛结束日,时,分。
  • 计算比赛持续时间。
我的解法:
CPP
#include <bits/stdc++.h>
#define int long long 
using namespace std;

int d, h, m;

signed main() {
	cin >> d >> h >> m;
	cout << (d >= 12 ? (13 + h) * 60 - 11 + m : max((h - 11) * 60 + (m - 11), -1ll));
	return 0;
}
正解:
CPP
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
ll d, h, m;

int main() {
	cin >> d >> h >> m;
	if(d * 10000 + h * 100 + m < 111111) {
		cout << -1;
		return 0;
	}
	d -= 11;
	h += d * 24;
	h -= 11;
	m += h * 60;
	m -= 11;
	cout << m;
	return 0;
}
此题看出的问题:
  1. 犹豫时间过长,不能静心计算。
  2. 计算能力有待提高

2. 负载均衡(balancing)

题目内容:
  • 给出几头奶牛的坐标。
  • 将这几头奶牛分成尽量均衡的四份。
  • 求这四块栅栏里的最大值的最小值。
此题基本算法:
考验代码模拟能力
此题看出的问题:
  1. 模拟能力不强(多做模拟题)
  2. 优化能力不强

3. 礼物(gifts)

题目大意:
  • 要给一些奶牛买礼物,有预算一些钱
  • 有一张优惠券,可以用半价购买
  • 求最多可以为多少头奶牛买礼物
此题基本算法:
考验代码模拟能力,贪心排序
正解:
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1005;
int n, b, f;

struct gifts {
	int p, s;
} g[N];

int cmp (gifts a, gifts b) {
	return a.p + a.s < b.p + b.s;
}

signed main() {
//	freopen("gifts.in", "r", stdin);
//	freopen("gifts.out", "w", stdout);
	cin >> n >> b;
	for (int i = 1; i <= n; i++) {
		cin >> g[i].p >> g[i].s;
	}
	stable_sort(g + 1, g + n + 1, cmp);
	int sum = 0, ans = 0;;
	for (int i = 1; i <= n; i++) {
		if (sum + (g[i].p + g[i].s) <= b) {
			sum += (g[i].p + g[i].s);
			ans++;
		} else {
			if (sum + (g[i].p / 2 + g[i].s) <= b && !f) {
				f = 1;
				ans++;
			}
		}
	}
	cout << ans;
	return 0;
}

4. 堆干草(stacking)

题目大意:
  • 有几次操作,每次操作往一些干草堆中加入一个单位的干草
  • 排序后,求这几堆干草的中位数
此题基本算法:
考验代码模拟能力,差分(一维)排序
正解:
CPP
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
const int N = 1e6 + 5;
ll n, k, s[N];

int main() {
	cin >> n >> k;
	for(int i = 1, a, b; i <= k; i++) {
		cin >> a >> b;
		s[a] += 1, s[b + 1] -= 1;
	}
	for(int i = 1; i <= n; i++) s[i] += s[i - 1];
	sort(s + 1,s + n + 1);
	cout << s[n / 2 + 1];
	return 0;
}
此题反映的问题:
  1. 差分不熟悉

5. 放牧模式(grazing)

题目大意:
  • 有两头奶牛在草地上吃草
  • 草地上有一些贫瘠的土地
  • 奶牛所走的每一格都是草地
  • 求有多少种方案最后两头奶牛在一个格子上
算法:
  1. DFS
  2. 模拟
反应的问题:
  1. 对于 DFS 题不熟悉,导致做题出错。
  2. 模拟能力不强

大总结

  • 加强模拟能力,做好题,好做题,做题好。
  • 复习学过的算法,DFS, BFS 等
  • 认真听懂每一道题

最后的最后

谢谢大家,以及老师的悉心栽培! 最后,别忘了给 Love_Star 一个关注,谢了ヾ(o′▽`o)ノ°°谢谢

评论

0 条评论,欢迎与作者交流。

正在加载评论...