【求助】80pts,不知道哪里错了
查看原帖
【求助】80pts,不知道哪里错了
121479
聪明的猪楼主2020/10/31 10:21

RT,调了好久都没找到错

评测记录

#include <cstdio>
#include <cctype>
#include <cstdint>
#include <cstdlib>

#include <array>
#include <limits>

using namespace std;

constexpr int kMaxNum(100000);
array<int64_t, kMaxNum + 5> kCamps;

inline int Read(void);
void Write(int);

int main(void) {
  int n(Read()), p2(0);
  int64_t loong_qi(0), tiger_qi(0),
          min_qi_diff(numeric_limits<int64_t>::max() - 1);
  kCamps.fill(0);

  for (int i = 1; i < n + 1; ++i)
    kCamps[i] = Read();

  int m(Read()), p1(Read()), s1(Read()), s2(Read());
  kCamps[p1] += s1;

  for (int i = 1; i < m; ++i)
    loong_qi += (m - i) * kCamps[i];

  for (int i = m + 1; i < n + 1; ++i)
    tiger_qi += (i - m) * kCamps[i];

  for (int i = 1; i < n + 1; ++i) {
    int64_t new_loong_qi(loong_qi), new_tiger_qi(tiger_qi);

    if (i < m)
      new_loong_qi += (m - i) * s2;
    else if (m < i)
      new_tiger_qi += (i - m) * s2;

    int64_t qi_diff(abs(new_loong_qi - new_tiger_qi));

    if (qi_diff < min_qi_diff) {
      min_qi_diff = qi_diff;
      p2 = i;
    }
  }

  Write(p2);
  putchar('\n');

  return 0;
}

inline int Read(void) {
  char ch(getchar());
  int num(0);

  while (!isdigit(ch))
    ch = getchar();

  while (isdigit(ch)) {
    num = (num << 3) + (num << 1) + (ch ^ 48);
    ch = getchar();
  }

  return num;
}

void Write(int n) {
  if (n > 9)
    Write(n / 10);
  putchar(n % 10 + '0');
}
2020/10/31 10:21
加载中...