10207 报名签到

题目描述

n 位同学(编号从1 到n)同时来到体育馆报名签到,领取准考证和参赛资料。为了有序报名,这n 位同学需要按编号次序(编号为1 的同学站在最前面)从前往后排成一条直线。然而每一位同学都不喜欢拥挤,对于第i 位同学,如果有另外一位同学距离他(她)的距离小于a[i],那么就会发生冲突。小可可想知道如果要不发生任何冲突的情况下,这n 位同学排队的队列最短长度是多少。

输入格式

输入有两行:

第一行一个整数n,表示报名签到的同学人数。第二行有n 个整数,第i 个整数a[i]表示第i 个同学必须与其他同学保持的距离。

输出格式

输出一行,包括一个整数,表示这n 位同学排队队列的最小长度。

注意:n 位同学要按1~n 的次序从前往后排队。

样例

输入 #1

3
3 1 2
输出 #1

5
数据范围与提示

对于100%的数据满足:1≤n≤100000,1≤a[i]≤100000。

分类标签

[数组应用]

C++题解代码

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

int b;
int c;
int a[100001];


// The main procedure
int main() {
  cin>>b;
  for (int i = 1; i <= b; i++) {
    cin>>a[i];
  }
  c = 0;
  for (int i = 2; i <= b; i++) {
    if (a[(i-1)] > a[i]) {
      c += a[(i-1)];
    } else {
      c += a[i];
    }
  }
  cout<<c;
  return 0;
}

Blockly题解代码图片