hbu2024暑假进阶训练营开营测试

目录

7-1 考试成绩

7-2 心理阴影面积


7-1 考试成绩

题目

Rain Sure同学在参加一场面试,一共有n道题目,他的初始分数为m分。

Rain Sure回答错一道题目就会扣一分,但是分数不会小于0;回答正确一道题目就会加一分。

给定一个长度为n的字符串,第i个字符如果为o,代表第i道题目Rain Sure回答正确了;如果第i个字符为x,代表第i道题目Rain Sure同学回答错误。

请你计算他的最终分数是多少。

输入格式

第一行两个整数分别代表n和m。

第二行一个长度为n的字符串,代表Rain Sure同学的回答情况。

1≤n≤2×105

0≤m≤2×105

保证字符串中只会出现ox

输出格式

请输出Rain Sure同学的最终分数。

测试样例一
3 0
xox
0
测试样例二
20 199999
oooooooooxoooooooooo
200017
测试样例三
20 10
xxxxxxxxxxxxxxxxxxxx
0
代码长度限制16 KB

时间限制400 ms

内存限制64 MB

栈限制8192 KB

解答

我的第一版

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


int length,score;


int main(){
    cin>>length>>score;
    char str[length];
    cin>>str[length];
    for(int i=length-1;str[i];i--){
        if(str[i]=='o'){
            score+=1;
        }
        else if(str[i]=='x'){
            score-=1;
        }
        if(score<0){
            score=0;
        }
    }
    cout<<score<<endl;
    return 0;
}

改进后

#include <iostream>
using namespace std;

int main() {
    int length, score;
    cin >> length >> score;
    string str;
    cin >> str;

    for (int i = 0; i < length; i++) {
        if (str[i] == 'o') {
            score += 1;
        } else if (str[i] == 'x') {
            score -= 1;
            if (score < 0) {
                score = 0;
            }
        }
    }
    cout << score << endl;
    return 0;
}

标准答案

#include <bits/stdc++.h>
using namespace std;
int n,m;
string s;
//这里用的是string
int main(){
    cin >> n >> m;
    cin >> s;
    for(int i=0;i<n;i++){
        if(s[i]=='o') m++;
        else if(m>0) m--;
//这里else if(m>0)真有操作
    }
    cout << m;
}

感悟

不用想的太复杂

7-2 心理阴影面积

题目

xlyy.JPG

这是一幅心理阴影面积图。我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线)。由红、蓝线围出的面积,就是我们在做作业时的心理阴影面积。

现给出红色拐点的坐标 (x,y),要求你算出这个心理阴影面积。

输入格式:

输入在一行中给出 2 个不超过 100 的正整数 x 和 y,并且保证有 x>y。这里假设横、纵坐标的最大值(即截止日和最终完成度)都是 100。

输出格式:

在一行中输出心理阴影面积。

友情提醒:三角形的面积 = 底边长 x 高 / 2;矩形面积 = 底边长 x 高。嫑想得太复杂,这是一道 5 分考减法的题……

输入样例:

90 10

输出样例:

4000
代码长度限制16 KB

时间限制400 ms

内存限制64 MB

栈限制8192 KB

解答

我的代码(正确)

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

int m,n;
int s1,s2,s3;
int s;

int main(){
    cin>>m>>n;
    s1=0.5*m*n;
    s2=0.5*(100-n)*(100-m);
    s3=(100-m)*n;
    s=100*50-s1-s2-s3;
    cout<<s<<endl;
}

答案

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

int main(){
    int x,y;
    cin>>x>>y;
    cout<<(10000-(100-x+y)*100)/2;
    return 0;
}

感悟

理想总面积:10000

在这个公式中,10000代表的是理想情况下的总面积。假设完成度和时间都是从 0100,在时间轴上完美理想的完成度曲线将形成一个直角三角形,底边和高都是 100,所以理想的三角形面积是:

100×1002=5000\frac{100 \times 100}{2} = 50002100×100​=5000

但是在公式中用到了10000,这表明我们实际上考虑的是两个这样的三角形(或两个面积),所以它代表的是两个理想进度三角形的总面积。你可以将其看作是“全局理想进度”的最大值。

实际偏差项:(100 - x + y)

这里的 (100 - x + y) 是实际偏差的衡量方式。我们先看看 xy 是什么:

  • x:当前的时间
  • y:当前的完成度

那么 100 - x + y 表示的是从时间轴和完成度的角度出发,实际进度点与理想进度的差异:

  • 100 - x 表示的是,距离完成理想时间的剩余时间。
  • y 表示当前的完成度。

举个例子,如果时间为 x = 80 且当前完成度为 y = 50,那么理想进度应该是 80% 的完成度,但实际的进度是 50%,这意味着我们比理想进度落后了。

偏差影响面积:(100−x+y)×100(100 - x + y) \times 100(100−x+y)×100

这个部分计算了与理想进度相比的差异面积。它通过偏差项 (100 - x + y) 乘以最大时间 100 来衡量,这个值是一个近似的面积表示。因为这个值是在时间维度上乘以当前完成度的差值,表示的是偏差带来的“心理阴影”的影响面积。

最终面积计算:10000−(100−x+y)×1002\frac{10000 - (100 - x + y) \times 100}{2}210000−(100−x+y)×100​
  1. 10000是理想的总面积。
  2. 减去偏差带来的面积,这就是公式中的(100 - x + y) * 100
  3. 最后,我们将这个值除以 2,因为我们要考虑的是一个进度三角形面积的阴影部分。

总结公式

这个公式的主要思想是从理想的总面积 10000(表示理想进度的累计)中减去一个由实际偏差衡量的面积。通过除以 2,我们将结果调整为一个三角形面积的等价表示。这是一种简化的方式来衡量实际与理想进度之间的“心理阴影面积”。

可以想象,随着时间 x 的增加,如果完成度 y 赶不上理想进度曲线,那么 (100 - x + y) 这一项就会变大,造成更大的阴影面积,也就是公式计算出的结果会更大。
没看懂,还是我的方法易懂一点,如果有大佬看懂了可以讲一下。

未完待续

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云 无 心 以 出 岫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值