[ARC103E] Tr/ee

有解的条件:

  • \(s_i=s_{n-i}\)
  • \(s_1=1,s_n=0\)

大小为 \(k\) 的菊花图的连通块大小只可能为 \(1\) 或 \(k-1\)

我们可以构造一条菊花链,\(s_i=1\) 的点作为链上的点,不妨记为 \(q_1 \sim q_m\)

运用差分的思想,在每个点下方接恰好 \(q_i-q_{i-1}\) 个点。

这样切菊花边只会得到 \(1\) 和 \(n-1\) 连通块,切链边恰好满足大小。

#include <cstdio>
#include <cstring>

const int MAXN = 1e5;
int n; char s[ MAXN + 5 ];

int main( ) {
    scanf("%s", s + 1 ); n = strlen( s + 1 );
    if( s[ 1 ] == '0' ) { puts("-1"); return 0; } s[ 0 ] = '0';
    for( int i = 1 ; i <= n ; i ++ ) if( s[ i ] != s[ n - i ] ) { puts("-1"); return 0; }
    
    int lst = 0;
    for( int i = 1 ; i <= n ; i ++ ) {
        if( s[ i ] == '1' ) {
            if( lst ) {
                printf("%d %d\n", lst , i );
                for( int j = lst + 1 ; j < i ; j ++ ) printf("%d %d\n", i , j );
            } 
            lst = i;
        }
    }
    printf("%d %d\n", lst , n );
    return 0;
}
上一篇:L2-023 图着色问题


下一篇:在allegro中如何手动设置缩放比例