T1 王老师的新水杯

难度:简单数学计算。

算法:数学,模拟。

子任务 113030 分):由于两种方式的喝水量相同,上下限相等,输出 00 即可。

子任务 223030 分):保证了 x>yx>y,因此上限为 n×xn×x,下限为 n×yn×y,直接输出 n×(xy)n×(x−y) 即可。需要注意数据范围,需要使用 long long 类型记录答案。

子任务 334040 分):此时 x,yx,y 的大小不一定,加一个判断分别处理即可。

C++ 代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
    long long n, x, y;
    cin >> n >> x >> y;
    
    if (x > y) cout << n * (x - y) << endl;
    else cout << n * (y - x) << endl;
    
    return 0;
}

T2 王老师骑行健身

难度:循环、求和、高级循环控制(break/continue)。

算法:模拟。

子任务 113030 分):保证了刚好骑了三天,可以用三个 if 分别判断 a[1]a[1]+a[2]a[1]+a[2]+a[3] 是否大于等于 100100

子任务 223030 分):保证了 a[i]=3,所以必然是第 3434 天达到了 100100 千米。

子任务 334040 分):在循环的过程中对输入的变量求和,当总和达到 100100 时输出天数并停止循环即可。

C++ 代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, ai, sum;
    cin >> n;
    
    sum = 0;
    for (int i = 1; i <= n; i ++ )
    {
        cin >> ai;
        sum += ai;
        if (sum >= 100)
        {
            cout << i;
            break;
        }
    }
    
    return 0;
}

T3 数数放了几天假

难度:简单字符串题。

算法:字符串处理。

子任务 113030 分):字符串中仅包含 .,每天都放假,一共上了 00 天班,输出 00 即可。

子任务 223030 分):由于不好办 ~,只需要计算 o 的数量即可。

子任务 334040 分):可以用 double 类型计算结果。更建议尽可能避免浮点数运算,分别统计半天和整天上班的数量,最后计算结果。

C++ 代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    string s;
    cin >> n;
    cin >> s;
    
    assert(n == s.size());
    int one = 0;
    int half = 0;
    for (int i = 0; i < n; i ++ )
    {
        if (s[i] == 'o') one ++;
        if (s[i] == '~') half ++;
    }
    
    one += half / 2;
    half %= 2;
    
    cout << one;
    if (half == 1) cout << ".5" << endl;
    
    return 0;
}

T4 再整理一次水杯

和 2025年新学期热身赛 的 “D. 缺or满?” 几乎一样,不同的是这次只能倒掉了,因此把所有水杯的水量倒成最少的水量即可。

难度:数组、求最值、求和。

算法:贪心,模拟。

子任务 113030 分):保证了最后一项为最小值,不需要额外求一遍最小值了。

子任务 223030 分):保证了第一项为最小值,不需要额外求一遍最小值了。

子任务 334040 分):正常求出最小值后,求出“每个数和最小值的差”之和即可。

C++ 代码

#include <bits/stdc++.h>
using namespace std;

int n;
int a[1005];

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i ++ ) cin >> a[i];
    
    int minAi = a[1];
    for (int i = 1; i <= n; i ++ )
        minAi = min(minAi, a[i]);
    
    int ans = 0;
    for (int i = 1; i <= n; i ++ )
        ans += a[i] - minAi;
    
    cout << ans << endl;
    
    return 0;
}

0 comments

No comments so far...