G
N
I
D
A
O
L

天梯赛-找密码


天梯赛-找密码

#include
#include
using namespace std;
char str[1000005];
int  dp1[30][2], dp2[1000005];
int main() {
    int N;
    cin >> N;
    for (int n = 0; n < N; n++) {
        int i, len = 0;
        memset(dp1, 0, sizeof(dp1));
        memset(dp2, 0, sizeof(dp2));
        dp2[0] = 1;
        cin >> str;
        for (i = 0; str[i]; i++) {
            len = 0x3f3f3f3f;
            for (int j = 0; j < 26; j++) {
                if (len > dp1[j][0] + 1) len = dp1[j][0] + 1, dp2[i + 1] = dp2[dp1[j][1]];
                else if (len == dp1[j][0] + 1) dp2[i + 1] = (dp2[i + 1] + dp2[dp1[j][1]]) % 1000000007;
            }
            dp1[str[i] - 'a'][0] = len;
            dp1[str[i] - 'a'][1] = i+1;
        }
        len = 0x3f3f3f3f;
        for (int j = 0; j < 26; j++) {
            if (len > dp1[j][0] + 1) len = dp1[j][0] + 1, dp2[i + 1] = dp2[dp1[j][1]];
            else if (len == dp1[j][0] + 1) dp2[i + 1] = (dp2[i + 1] + dp2[dp1[j][1]]) % 1000000007;
        }
        cout << "Case #" << n + 1 << ':' << endl
            << len << ' ' << dp2[i + 1] << endl;
    }
    return 0;
}

文章作者: AnglesD
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AnglesD !
评论
 上一篇
天梯赛-正方形游戏 天梯赛-正方形游戏
周末大家一起到郊外春游,小龙拿出一些长短不一的小木棒,来玩正方形的游戏,这个游戏就是看能否用这些木棒拼出正方形,所有木棒必须都用到。请你帮大家提前算出来这些木棒到底能不能拼出正方形。
2021-07-10
下一篇 
天梯赛-谁去做这个工作 天梯赛-谁去做这个工作
学校有一项比较危险的工作,分为不同步骤,由于工人们的身体条件和对工作的熟练程度不同,他们完成这些工作的危险度也不同,现在给出每个工人完成某步工作时的危险度的值,如果每个工人承担其中某一步工作,那么所有人分配完工作后,他们危险度相加的最小值是多少?
2021-07-10