T1 难or易?

难度:简单的条件判断语句。

算法:模拟。

子任务 113030 分):保证了 x<5x<5,直接输出 normalnormal 就好。

子任务 223030 分):保证了 xx 是奇数,只需要判断是否小于 55 就可以知道该输出什么。

子任务 334040 分):基础的条件判断语句,可以用三个分支,也可以嵌套一层。

C++ 代码

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

int main()
{
    int n;
    cin >> n;
    
    if (n < 5) cout << "normal" << endl;
    else if (n % 2 == 1) cout << "easy" << endl;
    else cout << "difficult" << endl;
    
	return 0;
}

T2 好or坏?

难度:循环数位分解基础题。

算法:枚举。

子任务 113030 分):保证了 nn 是一个一位数,变成了简单的条件判断的题目,只需要根据是否为 33 就可以算出具体的数。

子任务 223030 分):保证了 nn 是一个四位数,不需要循环数位分解。直接取个十百千位即可。

子任务 334040 分):在基础的数位分解的循环基础上配合上计数即可。

C++ 代码

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

int main()
{
    int n;
    cin >> n;
    
    int cnt3 = 0, cntE = 0;
    while (n > 0)
    {
        if (n % 10 == 3) cnt3 ++ ;
        else cntE ++ ;
        n /= 10;
    }
    if (cnt3 > cntE) cout << "good" << endl;
    else cout << "bad" << endl;

    return 0;
}

T3 读or过?

难度:简单的字符串枚举,主要给大家提醒了一下转义符的使用。

算法:字符串处理,枚举。

子任务 113030 分):保证了 xxintint 范围内。只需要按照第二题的做法来循环数位分解即可。

子任务 223030 分):整型没法存储那么大的数,所以需要用字符串存储。这个子任务保证了没有 33,只需要判断是否是 33 的倍数即可。按照提示,如果一个数的所有数位之和为 33 的倍数,那么它就是 33 的倍数。所以只需要计算 10001000 位的字符串的所有数字字符对应的数字之和是否是 33 的倍数即可。

子任务 334040 分):在做子任务 22 的基础上,顺带看看有没有哪个数位是 33 就好。

C++ 代码

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

int main()
{
    string s;
    cin >> s;
    bool flag = true; // 读
    int sum = 0;
    for (int i = 0, len = s.size(); i < len; i ++ )
        if (s[i] == '3')
        {
            flag = false;
            break;
        }
        else sum += s[i] - '0';
    
    if (sum % 3 == 0) flag = false;
    if (flag) cout << s << endl;
    else cout << "guo" << endl;
    
    return 0;
}

T4 缺or满?

难度:简单的贪心模拟。

算法:贪心,模拟。

显然只要把都加到水最多的水杯的水量即可。即找到所有数的最大值,然后求“每个数与最大值的差”之和即可。

子任务 113030 分):第一个数就是最大值,方便了很多,不用数组直接循环也可以。

子任务 223030 分):最后一个数才是最大值,用数组存储后直接求“每个数与最后一个数的差”之和即可。

子任务 334040 分):正常数组存储,然后找到最大值,再求“每个数与最大值的差”之和即可。

不用数组的做法: 如果不允许用数组的话,在找到最大值后就不能回过头去看每个数了。此时可以在枚举输入时直接算出每个水杯灌到 10001000 水量需要多少水,然后减去最大值和 10001000 的差乘以 nn 即可。

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 maxAi = a[1];
    for (int i = 1; i <= n; i ++ )
        maxAi = max(maxAi, a[i]);
    int ans = 0;
    for (int i = 1; i <= n; i ++ )
        ans += maxAi - a[i];
    
    cout << ans << endl;
    
    return 0;
}

1 comments

  • @ 2025-2-14 17:13:39

    老师我T4有更短的方法:

    #include<bits/stdc++.h>
    
    using namespace std;
    int n,a,b;
    int main(){
    	cin >> n;
    	for(int i=0;i<n;i++){
    		int x;
    		cin >> x;
    		if(x>b & i!=0) a+=i*(x-b);
    		else if(i==0) goto loop;
    		else a+=b-x;
    		loop : b=max(b,x);
    	}
    	cout << a;
    }
    
  • 1