- 西中经开联校 - 第 9 场周赛
【题解】西中经开联校 - 第 9 场周赛
- @ 2025-3-28 16:29:13
偶数场周赛较难,奇数场周赛较易。
T1 温暖的签到题001
难度:没有难度,简单数学计算。
算法:数学,模拟。
子任务 ( 分):由于 ,所以要么不额外开销,要么只额外开销一次,随便判断一下即可。
子任务 ( 分):保证了 ,所以直接计算 即可,需要注意 int 类型存储不下,需要使用 long long。
子任务 ( 分):此时 的大小不一定,显然要花的钱有 ,算一下多少天花额外的 即可,额外花钱的天数显然是 。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n, x, y, t = 1;
int main()
{
cin >> n >> x >> y;
cout << n * x + (n / 7) * y << endl;
return 0;
}
T2 温暖的签到题002
难度:循环、求和、求最小值。
算法:模拟。
子任务 ( 分):由于 ,只要判断 是不是最小值即可,用 和后面每组的 比较。
子任务 ( 分):保证了 ,所以直接比较 Csvoner 和其唯一的对手谁更小即可。
子任务 ( 分):如果会写子任务 ,写出来子任务 应该也没什么难度,循环求 和 的最小值 minn,最后判断 minn 是否等于 即可。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int a, b, c, minn, x, y, n;
int main()
{
cin >> x >> y;
cin >> n;
minn = x + y;
for (int i = 1; i <= n; i ++ )
{
cin >> a >> b >> c;
minn = min(minn, a + b + c);
}
if (minn == x + y) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}
T3 温暖的签到题003
难度:循环、字符串。
算法:字符串处理。
子任务 ( 分):保证以 < 开始和保证 > 结束,子任务其实是主要为了读错题的同学设置的,有的同学以为是自己曾经做过这个题,然后代码中会直接判断中间是否都是 =,这样代码就大错特错了,如果发现子任务 无法通过,再次仔细读题就可以发现题目没有读对。
子任务 ( 分):保证了没有字符 =,那么就直接输出 No 好了。
子任务 ( 分):如果会写子任务 ,写出来子任务3应该没有什么难度,可以先找 <,找到后判断其下一个是否为 =,然后再用循环去找是否存在一些个连续的 =,在最后一个 = 下一个又出现 > 即可。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
string s;
int main()
{
cin >> s;
int len = (int)s.size();
for (int i = 0; i < len; i ++ )
{
if (s[i] == '<' && s[i + 1] == '=')
{
for (int j = i + 1; j < len - 1; j ++ )
{
if (s[j] == '=' && s[j + 1] == '>')
{
cout << "Yes" << endl;
return 0;
}
if (s[j + 1] != '=') break;
}
}
}
cout << "No" << endl;
return 0;
}
T4 温暖的签到题004
难度:有那么一点点麻烦的分类讨论,日期和时间判断。
算法:模拟。
子任务 ( 分):保证了是 年,就不需要判断闰年了, 年一定是闰年。
子任务 ( 分):保证了不存在跨天,就不需要判断跨天了。
子任务 ( 分):正解其实就是分类讨论。
1.当前时间大于等于开始营业时间并小于结束时间,答案显然就是输出现在的日期和时间。
2.当前时间大于等于开始营业时间并且结束时间小于开始时间,答案显然还是现在的日期和时间。
3.结束时间小于开始时间并且当前时间小于结束时间,答案显然还是现在的日期和时间。
4.现在时间小于开始时间,答案显然就是现在的日期和开始时间。
5.其余情况需要第二天开始时间再来,进行第二天的日期计算即可。其中,第二天的日期计算,涉及到月份和闰年的计算,只要把细节都注意就行了,主要的坑点有,跨月份的情况,跨年份的情况,注意用 补齐两位数。
C++ 代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int dy[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int judge(int y)
{
if (y % 4 == 0 && y % 100 != 0) return 1;
if (y % 400 == 0) return 1;
return 0;
}
int yy, mo, dd, hh, mm, ss, a, b, c, d, e, f;
int main()
{
scanf("%d-%d-%d", &yy, &mo, &dd);
scanf("%d:%d:%d", &hh, &mm, &ss);
scanf("%d:%d:%d", &a, &b, &c);
scanf("%d:%d:%d", &d, &e, &f);
int now = ss + 60 * mm + 3600 * hh;
int st = c + 60 * b + 3600 * a;
int ed = f + 60 * e + 3600 * d;
if ((now >= st && now < ed) || (now >= st && ed <= st) || (ed <= st && now < ed))
printf ("%d-%02d-%02d %02d:%02d:%02d\n", yy, mo, dd, hh, mm, ss);
else if (now < st)
printf ("%d-%02d-%02d %02d:%02d:%02d\n", yy, mo, dd, a, b, c);
else
{
int t = dy[judge(yy)][mo - 1];
dd ++ ;
if (dd > t)
{
mo ++ ; dd = 1;
if (mo > 12) yy ++ ; mo = 1;
}
printf ("%d-%02d-%02d %02d:%02d:%02d\n", yy, mo, dd, a, b, c);
}
return 0;
}