Submission #23084

# Submission time Handle Problem Language Result Execution time Memory
23084 2017-05-02T16:27:16 Z model_code Rima (COCI17_rima) C++11
140 / 140
426 ms 57516 KB
#include <cstdio>
#include <cstring>
#include <cassert>
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

#define TRACE(x) cerr << #x << " = " << x << endl
#define REP(i, n) for (int i=0; i<n; i++)
#define FOR(i, a, b) for (int i=(a); i<(b); i++)

typedef long long ll;
typedef pair<int, int> P;
#define X first
#define Y second

const int MAX = 3000100;

struct node {
  int br, dp;
  vector <pair<char, node*> > V;
  node() {
    br = dp = 0;
    V.clear();
  }
} *root;

char s[MAX];
int rje = 0;

void insert()
{
  int len = (int) strlen(s);
  node *tmp = root;
  REP(i, len) {
    node *nov = 0;
    for (auto it : tmp->V)
      if (it.X == s[i]) {
        nov = it.Y;
        break;
      }

    if (!nov) {
      nov = new node;
      tmp->V.push_back({s[i], nov});
    }
    tmp = nov;
  }

  tmp->br = 1;
}

void dfs(node *p)
{
  P mx{0, 0};
  int ima = 0;

  for (auto it : p->V) {
    dfs(it.Y);
    ima += it.Y->br;
    mx = max(mx, P(mx.X, it.Y->dp));
    mx = max(mx, P(it.Y->dp, mx.X));

    p->dp = max(p->dp, it.Y->dp);
  }

  if (p->br) p->dp += 1 + max(0, ima-1);
  else p->dp = 0;

  rje = max(rje, mx.X + mx.Y + p->br + max(0, ima - 2));
}

int main()
{
  root = new node;

  int n;
  scanf("%d", &n);
  REP(i, n) {
    scanf("%s", s);
    reverse(s, s + strlen(s));
    insert();
  }

  dfs(root);
  printf("%d\n", rje);

  return 0;
}

Compilation message

rima.cpp: In function 'int main()':
rima.cpp:80:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &n);
                  ^
rima.cpp:82:19: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", s);
                   ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 4948 KB Output is correct
2 Correct 0 ms 4948 KB Output is correct
3 Correct 0 ms 4948 KB Output is correct
4 Correct 426 ms 50092 KB Output is correct
5 Correct 26 ms 5308 KB Output is correct
6 Correct 36 ms 56572 KB Output is correct
7 Correct 59 ms 56576 KB Output is correct
8 Correct 29 ms 56584 KB Output is correct
9 Correct 79 ms 57516 KB Output is correct
10 Correct 33 ms 56596 KB Output is correct