嗚呼いつもの様に群青
過ぎる日々にあくびが出る
さんざめく夜越え今日も
渋谷の街に朝が降る
どこか虚しいような
そんな気持ち
つまらないな
でもそれでいい
そんなもんさ
これでいい
知らず知らず隠してた
本当の声を響かせてよほら
見ないフリしていても
確かにそこにある
感じたままに描く
自分で選んだその色で
眠い空気纏う朝に
訪れた青い世界
好きなものを好きだと言う
怖くて仕方ないけど
本当の自分
出会えた気がしたんだ
嗚呼手を伸ばせば伸ばすほどに
遠くへゆく
思うようにいかない今日も
また慌ただしくもがいてる
悔しい気持ちも
ただ情けなくて
涙が出る
踏み込むほど
苦しくなる
痛くもなる
感じたままに進む
自分で選んだこの道を
重いまぶた擦る夜に
しがみついた青い誓い
好きなことを続けること
それは楽しいだけじゃない
本当にできる
不安になるけど
何枚でも
ほら何枚でも
自信がないから描いてきたんだよ
何回でも
ほら何回でも
積み上げてきたことが武器になる
周りを見たって
誰と比べたって
僕にしかできないことはなんだ
今でも自信なんかない
それでも
感じたことない気持ち
知らずにいた想い
あの日踏み出して
初めて感じたこの痛みも全部
好きなものと向き合うことで
触れたまだ小さな光
大丈夫行こうあとは楽しむだけだ
全てを賭けて描く
自分にしか出せない色で
朝も夜も走り続け
見つけ出した青い光
好きなものと向き合うこと
今だって怖いことだけど
もう今はあの日の透明な僕じゃない
ありのままの
かけがえの無い僕だ
知らず知らず隠してた
本当の声を響かせてよほら
見ないフリしていても
確かにそこに今もそこにあるよ
知らず知らず隠してた
本当の声を響かせてよさあ
見ないフリしていても
確かにそこに君の中に
没什么可推的了。
纪念一下我卡常了一下午
是 joke 私题但过于简单了
显然找循环节,整体一起找是莫名奇妙复杂度,我不会,考虑单个字母找。
循环节最长是 \(26n\) 的
发现直接找复杂度是 \(n26^2\) 不太可过。考虑反正也需要求一个字母跳 \(k(k\le n)\) 步的方案数,直接先预处理即可。
然后有了 \(next_{c,k}\) 就可以 \(26^2\) 暴力跳预处理循环节。
考虑查询,自然也是按位考虑,对于整个循环节可以不用考虑,但处理散块是 \(26\) 的(\(n\) 可以直接跳),总复杂度还是 \(n26^2\) 的。
考虑继续预处理,发现复杂度上限是最多要跳 \(26\) 个 \(n\) ,继续预处理出任意字符跳 \(k(\le 26)n\) 个字符,复杂度 \(26^2\)。
致此,已经做到了 \(26n\)。
然后你就可以通过了……吗?
当你真正实现的时候,你会发现,它简直跑的飞慢!
简单测一下时间,发现对于第一个预处理,\(26n\) 的复杂度,最高不到 \(3\times 10^7\),竟然会跑 \(2s\)。
后面的查询也半斤八两。
其实前后的原因类似,在预处理的时候,你有一个 \(26\times n\) 的数组的内存在肆意乱跳,寻址常数巨大,尝试多种方法后,对于第一个预处理,将其先拷贝一遍去除无用行并且交换前后两维使得第二位内存访问连续,就可以跑过了。
查询不太能优化寻址,但是我们发现题目中的 getHash
实现简单,我们又是按位考虑,可以直接边求边做,可以砍掉一半常数。
然后就可以卡过了。
有点太水了,下次可能推点好的?
图——from 匿名