百度之星第一场选拔赛第一题

本文介绍了一种计算图标最大距离的算法实现,通过分析输入数据中各图标首次和末次出现的位置来确定最大距离,并提供了简洁高效的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题其实不是很难,最后提交的代码有个地方考虑错了,如果数据全部是1的话答案应该是0,我的输出居然是n-1哎。。。悲剧,现在只能求宏哥。。给点力,不要出现全部是1的数据。。此题首先要知道一个事情,每一种图标的情况等于第一次出现此种图标和最后一次出现这种图标之间的距离,然后就可以依次类推:

比如说样例数据

8 3

3 3 2

那么只会是这种情况达到最大321......123(1代表第一种,2代表第二种...),算完一次,就减掉最外面的那一对,第二种的情况就变成了21......12因此中间的都是浮云,只需要计算m次就可以了,正确代码很短:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int n, m;
    int a;
    while (scanf("%d %d", &n, &m) != EOF)
    {
          long long ans = 0;
          for (int i = 0; i < m; i ++){
              scanf("%d", &a);
              if (a>1){   
                 ans += n-1;
                 n -= 2;
              }
          } 
          printf("%I64d/n", ans);
         
    }
    return 0;   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值