【汉中校区】26/3/27 周赛题解

~ 2026-4-4 16:52:16

A. 计算 BMI

分析

  • 难度:简单数学运算,难点主要在读题
  • 子任务 1(30 分):输出样例即可。
  • 子任务 2(30 分):保证了 aa 为 1,输出体重和 18.518.52424 即可。
  • 子任务 3(40 分):BMI 的计算按照公式来就好,显然某个 BMI 指数对应的体重应该是:BMI×体重×体重BMI\times 体重\times 体重

满分参考代码

#include <bits/stdc++.h>
using namespace std;
double a, b;
int main()
{
    cin >> a >> b;
    cout << fixed << setprecision(8);
    cout << b / a / a << "\n";
    cout << 18.5 * a * a << " " << 24 * a * a << "\n";
    return 0;
}

B. 零碎文件占用大小

分析

  • 难度:循环,求和,主要难点还是读题。
  • 子任务 1(30 分):保证了只有一个文件,计算这个文件占用空间就好,不用循环。显然空间占用就是考虑有几个整块,以及有没有多余的部分,简单检查除以 mm 的余数是否为 00 即可。
  • 子任务 2(30 分):最小单元为 11 KB,直接输出所有文件原始大小之和即可。
  • 子任务 3(40 分):分别求解每个文件的空间占用然后求和即可。

满分参考代码

#include <bits/stdc++.h>
using namespace std;
int n, m;
int x, ans;
int main()
{
    cin >> n >> m;
    ans = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> x;
        ans += x / m;
        if (x % m != 0)
            ans++;
    }
    cout << ans * m;
    return 0;
}

C. 科学记数法

分析

  • 难度:模拟,主要难点还是读题。
  • 子任务 1(30 分):显然直接输出字符串 xx,然后再输出 *10^0 即可。
  • 子任务 2(30 分):显然对于字符串 xx,输出 x[0].x[1]~x[s.size()-1]\times 10^(x.size()-1) 即可。
  • 子任务 3(40 分):注意到,题目规定了 xx 大于等于 11。容易发现,不管怎么样,都会输出字符串 ss 中的所有数字字符。小数点只是用来判断最后乘以 1010 的多少次方的。

满分参考代码

#include <bits/stdc++.h>
using namespace std;
string s;
int main()
{
    cin >> s;
    int num = 0;
    for (int i = 0; i < s.size(); i++)
        if (s[i] == '.')
            break;
        else
            num++;
    cout << s[0];
    if (s.size() > 1)
        cout << ".";
    for (int i = 1; i < s.size(); i++)
        if (s[i] != '.')
            cout << s[i];
    cout << "*10^" << num - 1 << "\n";
    return 0;
}

D. 变大变大变成回文数

分析

  • 难度:暴力枚举,数位分解。
  • 子任务 1(30 分):不需要变化,输出 00 即可。
  • 子任务 2(30 分):个位是 00,那显然最少把个位变成百位上的数即可,最后答案就是所有数百位上的数之和。
  • 子任务 3(40 分):暴力枚举每个数,然后再暴力枚举加多少能变成回文数即可。

满分参考代码

#include <bits/stdc++.h>
using namespace std;
int n, ai, ans;
bool f(int x)
{
    if (1 <= x && x <= 9)
        return true;
    if (10 <= x && x <= 99)
        return x % 10 == x / 10;
    if (100 <= x && x <= 999)
        return x % 10 == x / 100;
    return true; // 其实没必要
}
int main()
{
    cin >> n;
    ans = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> ai;
        while (!f(ai))
        {
            ans++;
            ai++;
        }
    }
    cout << ans;
    return 0;
}


我们会审查剪贴板内容,并对发布不合适内容的同学进行相应的处理