CTSC2014企鹅QQ

Posted shxnb666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTSC2014企鹅QQ相关的知识,希望对你有一定的参考价值。

题面

https://www.luogu.org/problem/P4503

题解

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define uLL unsigned long long
#define ri register int
#define N 30050
#define L 205
#define p1 107
#define p2 233
using namespace std;

uLL A1[N][L],A2[N][L],B1[N][L],B2[N][L];
int id[N];
char s[N][L];
int n,l,ss;
int sani;

bool cmp(int x,int y)
  return (A1[x][sani-1]<A1[y][sani-1] || A1[x][sani-1]==A1[y][sani-1] && A2[x][sani-1]<A2[y][sani-1]
  || A1[x][sani-1]==A1[y][sani-1] && A2[x][sani-1]==A2[y][sani-1] && B1[x][sani+1]<B1[y][sani+1]);


int main()
  scanf("%d %d %d",&n,&l,&ss);
  for (ri i=1;i<=n;i++) scanf("%s",s[i]+1);
  for (ri i=1;i<=n;i++) 
    for (ri j=1;j<=l;j++) 
      A1[i][j]=A1[i][j-1]*p1+s[i][j];
      A2[i][j]=A2[i][j-1]*p2+s[i][j];
    
    for (ri j=l;j>=1;j--) 
      B1[i][j]=B1[i][j+1]*p1+s[i][j];
    
  
  for (ri i=1;i<=n;i++) id[i]=i;
  long long ans=0LL;
  for (sani=1;sani<=l;sani++) 
    sort(id+1,id+n+1,cmp);
    int s=0;
    for (ri i=2;i<=n;i++) 
      if (A1[id[i]][sani-1]==A1[id[i-1]][sani-1] 
      && A2[id[i]][sani-1]==A2[id[i-1]][sani-1] 
      && B1[id[i]][sani+1]==B1[id[i-1]][sani+1])
      ans+=++s;
      else s=0;
    
  
  cout<<ans<<endl;

 

以上是关于CTSC2014企鹅QQ的主要内容,如果未能解决你的问题,请参考以下文章

bzoj——3555: [Ctsc2014]企鹅QQ

BZOJ-3555: [Ctsc2014]企鹅QQ (hash)

CTSC2014企鹅QQ

Bzoj 3555: [Ctsc2014]企鹅QQ

[Ctsc2014]企鹅QQ

[CTSC2014]企鹅QQ