<span>SPOJ KAOS</span>
题意:
1e5字符串,问你正反序大小相反的字符串对数
#include <bits/stdc++.h> using namespace std; const int N=1e5+10; int n,rid,a[N*10][27],f[N*10]; long long ans; string s[N]; void update(int x) { int l=s[x].length(),now=0; for(int i=l-1;i>=0;i--) { if(!a[now][s[x][i]-'a']) a[now][s[x][i]-'a']=++rid; now=a[now][s[x][i]-'a']; f[now]++; } } void query(int x) { int l=s[x].length(),now=0; for(int i=l-1;i>=0;i--) { for(int j=s[x][i]-'a'+1;j<26;j++) ans+=f[a[now][j]]; now=a[now][s[x][i]-'a']; } for(int i=0;i<26;i++) ans+=f[a[now][i]]; } int main() { scanf("%d",&n); for(int i=0;i<n;i++) cin>>s[i]; sort(s,s+n); for(int i=0;i<n;i++) update(i),query(i); printf("%lld\n",ans); return 0; }