(思维)(必要做题步骤)(皮卡丘与 Codeforces )D - 先来签个到

目录

题目链接

一些话

流程

套路

ac代码


题目链接

D - 先来签个到(真心换真心)

皮卡丘与 Codeforces - Gym 103478A - Virtual Judge (csgrandeur.cn)

 


一些话

比赛时觉得很怪的一道题,为什么觉得很怪呢?因为我是傻逼。

wa5发纯纯的做题习惯与思维方式有问题

1.是比赛时在纠结分数小于0的能不能参加比赛,

2.是分数可不可以小于0还是到了0再扣分还是0

关于1,题目分数范围是-1e4~+1e4,全给负分账号是合法的,如果全给负分的话,怎么参加比赛?

关于2,还是题目分数范围的问题,初始分数都可小于0了,还在纠结分数可不可以小于0?还纠结扣到0再扣分的结果?

因为纠结这些东西,所以在关键的wa1后,又往上面纠结的情况做了尝试,然后出现4wa

至于最关键的1wa,是由于没有注意题目的边界数据引发的特殊情况,因为太久没遇到此类边界特殊情况的题,所以一直忽略了这个步骤,经过这次罚时应该得到教训,不要因为贪快而忽略解题步骤。


流程

题目要账号中的最大分数账号的分数最大,所以理所当然会想到能加分的比赛就用它来打,不能加分的比赛就用别的号。先找出最大分值,再将读到的正值加到最大分值中最后再输出即可,但这只是一般情况。

通过观察题目给的账号数目的数据范围可以发现,账号数是可以为1的,此时无论比赛加分还是扣分,你都只能拿同一个账号来打,所以流程就变为将读到的值加入账号分值中最后再输出


套路

必要做题步骤,无条件

考虑完一般情况后,观察题目边界值是否会导致题目出现特殊情况


ac代码

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
ll f[N];
int main(){
    ll n,m;
    cin >>n >>m;
    for(int i = 1;i <= n;i++){
        scanf("%lld",&f[i]);
    }
    sort(f+1,f+n+1);
    if(n > 1){
        while(m--){
        ll x;
        scanf("%lld",&x);
        if(x > 0) {
            f[n] += x;
        }
        }
    }   
    else if(n == 1){
        while(m--){
            ll x;
            scanf("%lld",&x);
            f[n] += x;
        }
    }
    
    cout << f[n] << endl;
    
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值