AtCoder 杂题训练

前言:

因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年noip普及组都刷了一遍,离noip还有50+天,想弄点强化训练什么的。

想了想,就这些天学文化课之余有空就把AtCoder之前那些ABC/ARC 的 C D E 什么的刷一下吧(一般是D,可能会有简单一点的E和难一点的C)(可能会很慢,毕竟基本有时间也就周末了)

所以就开了这个坑鞭策一下自己,上个坑是dp的,开了50题,补的巨累...这次吸取教训,只开20题...(也没那么多时间去刷题了)

不会说题意,题意的话可以上网找或者去原站看,只会简述做法以及附上代码

目前1/20


1.[AtCoder ARC059 D/ABC043D]Unbalanced

题目链接

总结:结论题

一找就是一道神题...

知道结论后觉得挺简单挺显然的,但是不知道结论的时候真的死活想不出来

对于一个不平衡的串,显然它至少有一个子串是这个样子的“$XX$” ,"$XYX$",$X$和$Y$分别代表不同的字母

然后这样的子串也是最简的不平衡的串。

所以只要在原串中$O(n)$扫一遍,找出形如$XX$,$XYX$的串就可以了(有SPJ)(但是我并不会证明为什么在一个不平衡的串里面一定会有形如$XX$,$XYX$的子串,如果有哪位大大会证可以在评论区里说一下吗QAQ)

#include <bits/stdc++.h>

using namespace std ;

char s[ 100010 ] ;

int main() {
    scanf( "%s" , s + 1 ) ;
    int n = strlen( s + 1 ) ;
    for( int i = 1 ; i <= n ; i ++ ) {
        if( s[ i ] == s[ i + 2 ] ) {
            printf( "%d %d\n" , i , i + 2 ) ;
            return 0 ;
        }
        if( s[ i ] == s[ i + 1 ] ) {
            printf( "%d %d\n" , i , i + 1 ) ;
            return 0 ;
        }
    }
    puts( "-1 -1" ) ;
    return 0 ;
}
arc059D

猜你喜欢

转载自www.cnblogs.com/henry-1202/p/atcoder_training.html