前言:
因为要普及了,今年没一等就可以退役去学文化课了,所以暑假把历年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 ; }