Orthogonal Anagram

题意

一个字符串的变形词是一个字符串,它含有恰好完全一样的字母,可能以不同的顺序出现。
字符串S和T是正交的,当且仅当它们长度相同,而且每个对应位都不同。
给出一个字符串S,求S的字典序最小的正交变形词。如果这样的字符串不存在,就让答案是空串。

字符串长度 n50000 ,所有字符都是小写英语字母。

Time Limits:1000ms
Memory Limits:64M

分析

因为要求字典序最小,我们可以考虑贪心。
从前往后,对于每一位,我们枚举它这位放什么字母,那么我们的问题就变成了如何判定这位放了某个字母后是否合法。比较容易想到的是网络流。
对于当前枚举到的位置 i ,我们只要知道这位放某个字母后第 i+1 ~ n 位是否存在合法方案。所以源点向每个字母连条容量为当前该字母还能放的个数的边,每个字母向原字符串第 i+1 ~ n 位与该字母不相同的位置连条容量为1的边, i+1 ~ n 位与汇点连条容量为1的边。若能满流,说明存在合法方案。
但是最坏情况下,网络流会超时。我们需要更快的判定方法。
设对于字符 i ,可用字符数为 fi ,需覆盖字符数为 gi 。同时总字符数为 length
则有: i,fi+gilength 本题所构图能够满流 。
必要性显然,充分性可用反证法证明。
这样原题就能很好地解决了。

你可能感兴趣的:(Orthogonal Anagram)