858D - Polycarp's phone book - CodeForces Solution


data structures implementation sortings *1600

Please click on ads to support us..

C++ Code:

//
// Copyright 2023 Turing Edu. All Rights Reserved.
//
// FileName: 858D.cc
// Author: Beiyu Li <[email protected]>
// Date: 2023-03-17
//
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int inf = 0x3f3f3f3f;
const LL infLL = 0x3f3f3f3f3f3f3f3fLL;

const int maxn = 70000 + 5;
const int mod = 19260817;

int n;
char s[maxn][11];
int h[maxn][10], p10[10];
int cnt[mod];
pair<int, int> ret[maxn];

int Hash(int i, int l, int r) {
  return (h[i][r] - (LL)h[i][l-1] * p10[r-l+1] % mod + mod) % mod;
}

int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%s", s[i] + 1);
    for (int j = 1; j <= 9; ++j)
      h[i][j] = (h[i][j-1] * 10 + s[i][j] - '0') % mod;
  }
  for (int j = 0; j < 10; ++j) p10[j] = (j? p10[j-1] * 10 % mod: 1);
  for (int l = 1; l <= 9; ++l) {
    memset(cnt, 0, sizeof(cnt));
    for (int i = 0; i < n; ++i)
      for (int j = 1; j + l <= 10; ++j) ++cnt[Hash(i,j,j+l-1)];
    for (int i = 0; i < n; ++i) {
      if (ret[i].first) continue;
      for (int j = 1; j + l <= 10; ++j)
        if (!--cnt[Hash(i,j,j+l-1)]) ret[i] = make_pair(j, l);
      for (int j = 1; j + l <= 10; ++j) ++cnt[Hash(i,j,j+l-1)];
    }
  }
  for (int i = 0; i < n; ++i) {
    s[i][ret[i].first+ret[i].second] = 0;
    printf("%s\n", s[i] + ret[i].first);
  }

  return 0;
}


Comments

Submit
0 Comments
More Questions

1486B - Eastern Exhibition
1363A - Odd Selection
131B - Opposites Attract
490C - Hacking Cypher
158B - Taxi
41C - Email address
1373D - Maximum Sum on Even Positions
1574C - Slay the Dragon
621A - Wet Shark and Odd and Even
1395A - Boboniu Likes to Color Balls
1637C - Andrew and Stones
1334B - Middle Class
260C - Balls and Boxes
1554A - Cherry
11B - Jumping Jack
716A - Crazy Computer
644A - Parliament of Berland
1657C - Bracket Sequence Deletion
1657B - XY Sequence
1009A - Game Shopping
1657A - Integer Moves
230B - T-primes
630A - Again Twenty Five
1234D - Distinct Characters Queries
1183A - Nearest Interesting Number
1009E - Intercity Travelling
1637B - MEX and Array
224A - Parallelepiped
964A - Splits
1615A - Closing The Gap