提出 #3658086
ソースコード 拡げる
import java.io.BufferedReader
import java.io.InputStreamReader
class C
fun main( args: Array<String> ) {
val st = BufferedReader( InputStreamReader( System.`in` ) )
val n = st.nextInt()
val s = st.readLine()
val q = st.nextInt()
val len = run {
val list = st.nextInts().toMutableList()
list.add( 3 )
return@run list.toIntArray()
}
val p = Array( len.size, { it } )
p.sortBy { len[it] }
val r = LongArray( len.size )
r[p[0]] = run {
var cnt = 0L
for ( i in 0 .. s.length - 3 ) {
if ( s[i] == 'D' && s[i + 1] == 'M' && s[i + 2] == 'C' ) {
cnt ++
}
}
return@run cnt
}
val mCount = run {
val tmp = LongArray( n + 1 )
for ( i in s.indices ) {
tmp[i + 1] = tmp[i] + if ( s[i] == 'M' ) 1 else 0
}
return@run tmp
}
val cCount = run {
val tmp = LongArray( n + 1 )
for ( i in s.indices ) {
tmp[i + 1] = tmp[i] + if ( s[i] == 'C' ) 1 else 0
}
return@run tmp
}
for ( i in 1 until p.size ) {
r[p[i]] = r[p[i - 1]]
if ( len[p[i]] == len[p[i - 1]] ) {
continue
}
val pairs = LongArray( s.length + 1 )
run {
val l = len[p[i]] - len[p[i - 1]]
var mc = 0L
var cc = 0L
for ( j in s.indices.reversed() ) {
if ( j < s.lastIndex ) pairs[j] = pairs[j + 1]
if ( j + l < s.length ) {
if ( s[j + l] == 'C' ) {
pairs[j] -= mc
cc --
}
if ( s[j + l] == 'M' ) {
mc --
}
}
if ( s[j] == 'M' ) {
pairs[j] += cc
mc ++
}
if ( s[j] == 'C' ) {
cc ++
}
}
}
for ( j in 0 .. s.length - len[p[i - 1]] ) {
if ( s[j] != 'D' ) continue
r[p[i]] += ( mCount[j + len[p[i - 1]]] - mCount[j] ) * ( cCount[Math.min( cCount.lastIndex, j + len[p[i]] )] - cCount[j + len[p[i - 1]]] )
r[p[i]] += pairs[j + len[p[i - 1]]]
}
}
for ( i in 0 until q ) {
println( r[i] )
}
}
private fun BufferedReader.nextInt(): Int {
return readLine().toInt()
}
private fun BufferedReader.nextInts(): IntArray {
val s = readLine().split( " " )
return IntArray( s.size, { s[it].toInt() } )
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | C - k-DMC |
| ユーザ | Chushuhuch |
| 言語 | Kotlin (1.0.0) |
| 得点 | 600 |
| コード長 | 2693 Byte |
| 結果 | AC |
| 実行時間 | 1837 ms |
| メモリ | 284992 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 600 / 600 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | dmc-dmc-00, dmc-dmc-01, dmc-dmc-02, dmc-dmc-03, dmc-dmc-04, dmc-large-00, dmc-large-01, dmc-large-02, dmc-large-03, dmc-large-04, dmc-random-00, dmc-random-01, dmc-random-02, dmc-random-03, dmc-random-04, dmc-special-00, dmc-special-01, dmc-special-02, dmc-special-03, sample_01, sample_02, sample_03, sample_04 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| dmc-dmc-00 | AC | 1798 ms | 272312 KiB |
| dmc-dmc-01 | AC | 1837 ms | 272112 KiB |
| dmc-dmc-02 | AC | 1799 ms | 272408 KiB |
| dmc-dmc-03 | AC | 1831 ms | 272308 KiB |
| dmc-dmc-04 | AC | 1828 ms | 274224 KiB |
| dmc-large-00 | AC | 1098 ms | 273804 KiB |
| dmc-large-01 | AC | 1098 ms | 267256 KiB |
| dmc-large-02 | AC | 1135 ms | 272780 KiB |
| dmc-large-03 | AC | 1115 ms | 273272 KiB |
| dmc-large-04 | AC | 1140 ms | 274600 KiB |
| dmc-random-00 | AC | 980 ms | 284992 KiB |
| dmc-random-01 | AC | 887 ms | 234796 KiB |
| dmc-random-02 | AC | 792 ms | 275216 KiB |
| dmc-random-03 | AC | 702 ms | 244412 KiB |
| dmc-random-04 | AC | 629 ms | 228724 KiB |
| dmc-special-00 | AC | 974 ms | 267380 KiB |
| dmc-special-01 | AC | 1094 ms | 273420 KiB |
| dmc-special-02 | AC | 1054 ms | 274688 KiB |
| dmc-special-03 | AC | 976 ms | 265996 KiB |
| sample_01 | AC | 214 ms | 33864 KiB |
| sample_02 | AC | 211 ms | 33868 KiB |
| sample_03 | AC | 210 ms | 35696 KiB |
| sample_04 | AC | 210 ms | 33732 KiB |