0分求助
查看原帖
0分求助
289573
wtxy2006楼主2020/7/26 21:21

RT,真的不知道错了,样例全过了,但1分都没有。

// P6686 混凝土数学
#include <cstdio>
#include <iostream>
#include <algorithm>
#define p 998244353
#define MN 500005
#define int long long
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  return x * f;
}
int n, a[MN], b[MN], ans;
signed main() {
  n = read();
  for(int i = 0; i < n; i++) a[i] = read(), b[a[i]]++;
  sort(a, a + n);
  for(int i = 1; i < MN / 2; i++) b[i] += b[i - 1]; // 统计小于i边的数量
  for(int l = 0, r = 0; r < n; l = r) {
    for(; a[l] == a[r]; r++);
    if(r - l > 1) ans += ((r - l) * (r - l - 1) / 2 % p) * (b[a[l] * 2 - 1] - b[a[l]] + b[a[l] - 1]) % p, ans %= p; // 能组成多少等腰三角形
    if(r - l > 2) ans += ((((r - l) * (r - l - 1))) / 2 * (r - l - 2) / 3) % p, ans %= p; // 能组成多少等边三角形
  }
  printf("%lld", ans);
  return 0;
}
2020/7/26 21:21
加载中...