专栏文章

CF2056C Palindromic Subsequences

CF2056C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqgcyjl
此快照首次捕获于
2025/12/04 04:21
3 个月前
此快照最后确认于
2025/12/04 04:21
3 个月前
查看原文

题解

先扔结论:
  • n=6n = 6 时构造 1,1,2,3,1,21, 1, 2, 3, 1, 2
  • 其他情况构造 1,2,3,4,,n3,n2,1,21, 2, 3, 4, \dots, n - 3, n - 2, 1, 2
第一种情况是样例,不用解释。
第二种情况可以发现最大的回文子序列的长度永远是 33,分别为:
  • 1,2,11, 2, 1
  • 1,3,11, 3, 1
  • \dots
  • 1,n3,11, n - 3, 1
  • 1,n2,11, n - 2, 1
  • 2,3,22, 3, 2
  • 2,4,22, 4, 2
  • \dots
  • 2,n2,22, n - 2, 2
  • 2,1,22, 1, 2
总共有 2×(n3)2 \times (n - 3) 个,又 n>6n > 6,所以构造是合法的。

代码

CPP
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define dbg(x) cout << #x " = " << (x) << endl
#define quickio ios::sync_with_stdio(false);
#define quickin cin.tie(0);
#define quickout cout.tie(0);

using namespace std;

signed main() {
    quickio
    quickin
    quickout
    int t;
    cin >> t;

    while(t--) {
        int n;
        cin >> n;

        if(n == 6) {
            cout << "1 1 2 3 1 2\n";
            continue ;
        }
        cout << "1 2 ";
        for(int i = 3; i <= n - 2; i++) {
            cout << i << ' ';
        }
        cout << "1 2\n";
    }
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...