ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[USACO12JAN]Video Game G【AC自动机+DP】

2022-08-24 06:32:57  阅读:201  来源: 互联网

标签:为什么 AC ch int USACO12JAN 哥哥 Game fail


“Can a man still be brave if he’s afraid?”
“That is the only time a man can be brave.”

每天六点多起床,整理好寝室内务后就去图书馆研读论文和处理邮件,完成后开vue写前端准备项目,中途还要跑去做核酸和水军理课,因为组上项目的事迟到了两次军训了,九点结束后疲惫地赶往图书馆改改改,改完基本接近闭馆,回寝室刷一两道ACM题,写写有的没的博客,半死不活地倒在床上,而这也是平常的一天,本应如此……

Why do you think I came all this way?

为什么,看见了她的照片,为什么,她笑得那么开心,为什么,我为她的快乐也感到快乐
总是这样
总是这样,每次都是
我会窥见自己内心的阴暗面,我其实想的是
为什么,她家境那么好,为什么,她那么天生丽质,为什么,她能从小一路名校受到那么好的教育
我怎么配追一个各方面碾压自己的女孩,只凭两人涉世未深时那些单纯愉快的交谈?本就不是同一个世界的人,本就不是
我是不是,还可以更努力一点?
不,爱是理性的死亡,那么理性同样可以是爱的死亡
这么多年,武汉大学里,在正式开学前就主动联系教授并成功加入项目组的学生,我是第一个,这并不是值得高兴的事,与其说是上进,不如说是来自久远岁月的自卑作祟。
自从艾斯黛拉与皮普于废墟间重逢,我已迷失太久
我安静地看着周围,女孩子恋爱脑,男孩子精虫上脑;我又向里面看,浅薄、做作、失礼、自以为是的自己
我厌恶的不是庸俗的喧嚣,而是不能超脱其中的自己
我已无数次试图逃离
无数的泪水,方才构成我们的世界,你听见了吗,从东边天空升起的世界
一生用追寻来掩饰逃离,失败后又靠臆想舔舐伤痕
我出生于贫困的山林
我最重要的哥哥在我眼前死去
我最擅长的折纸是小时候为了摆摊卖钱补贴家用被迫所学
我仅仅考上个985就成了全乡里的谈资……
其实上高中后,家里经济状况渐渐也好转了,足以让我带着R7000来学校了。可是,为了一口水走几公里外打水的记忆,是再多可乐奶茶也淹没不了的
地球有七十亿人,有人能告诉我吗
为什么,哥哥会死啊,为什么,我力气那么小,没能拉哥哥上来啊,为什么,我的故乡那么闭塞,没能救回哥哥啊
为什么,那么多年了,偏偏今晚情绪再也控制不住了
我至今清晰地记得哥哥从强装镇定安抚我,到虚弱至极却不放弃希望的眼神,直到最终在黑暗中安静下来的空洞瞳孔…………
我后来也意识到,我从未从那晚黛青色的暮光里走出来,那段惨剧已经刻进我的灵魂,我像是上了发条的人偶,向着前方跌跌撞撞
上了发条的人偶吗?这个比喻,好像还不错
我是不会停下来的
因为在那个晚上,在凝视哥哥发散的瞳孔时,我就已经没把自己当活着了
中国十几亿人,没有谁会关注一个悲惨的农村家庭,也没有谁会留意一个心浮气躁的大一新生
更没有人会知道,他曾经多么相信考上名校就可以改写命运,到头来,却发现什么都没改变
就如他没人会看的博客,已经都快沦落成日记本了呵_
弗洛伊德说,人是同时崇尚生存与死亡的存在
我所理解的死亡,是在某个安静的傍晚,独自走在河畔,夕阳落红染赤了粼粼波光,和风正好,芦苇摇曳,于是我坐下,对自己说,啊,我要死在这了
在等到那遥远的夕阳前,还是挺起胸膛吧,没有什么比赶路更能让人忘却曾经
\(AC\)自动机上跳\(fail\)统计答案即可,常规\(DP\),毕竟\(trie\)图的\(DP\)都大同小异的

$Why$ $do$ $you$ $think$ $I$ $came$ $all$ $this$ $way$
# include "bits/stdc++.h"
using namespace std;
constexpr int N = 1003;
struct Ahio_Corasick_Automation {
    struct node {
        int ch[3], fail, tot;
    } t[N]; // hey, guys. I found that writing structure is more elegent and happy :)
    int trie_index;
    void insert(char *str) {
        int len = strlen(str + 1), u = 0;
        for(int i = 1; i <= len; ++i) {
            int v = str[i] - 'A';
            if(!t[u].ch[v]) t[u].ch[v] = ++trie_index;
            u = t[u].ch[v];
        }
        ++t[u].tot;
    }
    void build() {
        queue<int> q;
        for(int i = 0; i < 3; ++i) {
            if(t[0].ch[i]) {
                q.push(t[0].ch[i]);
            }
        }
        while(!q.empty()) {
            int u = q.front();
            q.pop();
            for(int i = 0; i < 3; ++i) {
                int &v = t[u].ch[i];
                if(v) {
                    t[v].fail = t[t[u].fail].ch[i];
                    q.push(v);
                }
                else {
                    v = t[t[u].fail].ch[i];
                }
            }
            t[u].tot += t[t[u].fail].tot; // save the time from jumping fail
        }
    }
} AC;
char str[N];
int main() {
    int n, K;
    scanf("%d%d", &n, &K);
    for(int i = 1; i <= n; ++i) {
        scanf("%s", str + 1);
        AC.insert(str);
    }
    AC.build();
    
    vector f(K + 1, vector<int>(AC.trie_index + 1, -0x3f3f3f3f));
   	f[0][0] = 0;
    for(int i = 1; i <= K; ++i) {
        for(int j = 0; j <= AC.trie_index; ++j) {
            for(int k = 0; k < 3; ++k) {
                f[i][AC.t[j].ch[k]] = max(f[i][AC.t[j].ch[k]], f[i - 1][j] + AC.t[AC.t[j].ch[k]].tot);
            }
        }
    }
    int ans = -0x7fffffff;
    for(int i = 0; i <= AC.trie_index; ++i) {
        ans = max(ans, f[K][i]);
    }
    printf("%d", ans);
    return 0;
}

image

标签:为什么,AC,ch,int,USACO12JAN,哥哥,Game,fail
来源: https://www.cnblogs.com/bingoyes/p/16618422.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有