why RE?
  • 板块学术版
  • 楼主wangyishan
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/3 23:26
  • 上次更新2023/11/4 10:04:01
查看原帖
why RE?
612044
wangyishan楼主2023/11/3 23:26

rt
Code:

#include <bits/stdc++.h>
using namespace std;
int n;
string a[200050];
int sum[200050][10];
map<int, int> mp[6]; // sum->cnt
map<int, int> cha[3];
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    int len = a[i].size();
    sum[i][0] = a[i][0] - '0';
    for (int j = 1; j < len; j++) {
      sum[i][j] = sum[i][j - 1] + a[i][j] - '0';
    }
    sum[i][len] = sum[i][len - 1];
    mp[sum[i][len]][len]++;
    if (len >= 2)
      cha[sum[i][len - 2] - (a[i][len - 1] - '0')][1]++;
    if (len >= 3)
      cha[sum[i][len - 3] - (a[i][len - 1] - '0' + a[i][len - 2] - '0')][2]++;
  }
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    int len = a[i].size();
    for (int dig = 1; dig <= 5; dig++) {
      if ((len + dig) % 2 == 1)
        continue;
      if (len > dig)
        ans += mp[sum[i][len] - sum[i][len - dig - 1]][dig];
      else if (len == dig)
        ans += mp[sum[i][len]][dig];
      else {
        int ch = (dig - len) / 2;
        ans += cha[sum[i][len]][ch];
        // ans+=mp[sum[i][len]][dig];
        // cout << 114514 << endl;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
2023/11/3 23:26
加载中...