首页 > 其他分享 >cf-div.2-868-D

cf-div.2-868-D

时间:2023-04-28 15:48:25浏览次数:54  
标签:子串 868 int 字母 cf bool div.2 回文

题目链接:https://codeforces.com/contest/1823/problem/D

比赛的时候关键性质已经想到,但没想到怎么正确构造。

性质:每次新加一个字母,回文子串的数量最多增加1(因为题目需要不相同的回文子串)。

证明:可以用反证法,易证。

构造方法:由于k的值很小(只有20),所以对于不再增加(回文子串)的字母串,用abc的循环节填充,否则就用一个新的字母填充。
比如用e添5个新的回文子串,构造为eeeee。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int K[N],X[N];
char ans[N];
void solve(){
    int n,c;
    cin>>n>>c;
    int sk = 0,sx = 0;
    int t = 0;
    bool flag = 1;
    bool f = 0;
    int val = 0;
    for (int i=1;i<=c;i++) cin>>K[i];
    for (int i=1;i<=c;i++) cin>>X[i];
    for (int i=1;i<=c;i++){
        f = 0;
        int k = K[i],x = X[i];
        if (k-sk<x-sx) {
            flag = 0;
            break;
        }
        else{
            while(sx<x){
                if (val<=2) ans[sk+1] = val+'a',val++;
                else {
                    ans[sk+1] = val+'a'; 
                    f = 1;
                }
                sx++;
                sk++;
            }
            if (f) val++;
            while(sk<k){
                ans[sk+1] = t+'a';
                t++;
                sk++;
                if (t==3) t = 0;
            }
        }
    }
    if (!flag) cout<<"NO\n";
    else{
        cout<<"YES\n";
        for (int i=1;i<=n;i++) cout<<ans[i];
        cout<<'\n';
    }
}
int main(){
    int T;
    T = 1;
    cin>>T;
    while(T--) solve();
    return 0;
}

标签:子串,868,int,字母,cf,bool,div.2,回文
From: https://www.cnblogs.com/xjwrr/p/17362351.html

相关文章

  • CF1814E Chain Chips & CF750E New Year and Old Subsequence - 动态 dp -
    一句话概括动态dp:用来解决带修改/多次区间询问的dp问题。将转移写成矩阵的形式,然后利用线段树求解区间问题/单点修改1814E注意一条边要么选2要么选0次,而且第一条边一定是选了2次。如果有一条边没选,那么这条边两侧的边一定都选了。设\(f_i\)代表考虑到第\(i\)条边,......
  • CF960F Pathwalks | 线段树优化DP
    题目设\(dp[x,w]\)为以结点\(x\)为结尾,且最后一条边边权为\(w\)的最长路径长度。考虑根据顺序加边,对于边\((u,v)\),更新\[dp[v,w]=\max_{w'<w}\{dp[u,w']\}+1\]对于每个节点,建一棵线段树,维护\(dp[x]\),这样每次更新\(dp[v,w]\)就相当于在\(dp[u]\)所对应的线段树中查询\([......
  • CF1699A The Third Three Number Problem
    题意简述构造出一个三元组a,b,c使得(a⊕b)+(a⊕c)+(b⊕c)=n,若无解输出-1。符号⊕的意思为异或个人分析首先要了解异或符号的性质:1,x⊕0=x2,x⊕x=x根据异或符号的性质可以得到一下构造:a=b=0,c=n/2c=0,a=b=n/2通过上述可以发现答案都是偶数所以若n为奇则无解......
  • 「CF1188E」Problem from Red Panda
    题目点这里看题目。给定一个长度为\(k\)的非负整数序列\(a\)。你可以对于\(a\)做如下操作任意次:选定\(1\lej\lek\),满足除了\(a_j\)外\(a\)中其它数都为正。而后,令\(a_j\)加上\(k-1\),令除了\(a_j\)外\(a\)中其它数减去\(-1\)。(这样一次操作被称为“操......
  • CF1621A Stable Arrangement of Rooks
    题目简述:一个n*n的棋盘上,放上k个车,使得一任意车向上下左右移动一格(这里的车可以上下左右移动任意步数)后不与其他车相撞(注:不能走出棋盘之外)。个人分析:从题目可知,在车上下左右移动一格后不会与其他车相撞,换句话说,两辆车之间至少相隔一行一列,放在对角线上是最优想法,若无解则......
  • CF1822G2 - Magic Triples
    比较好的题目,别的不说,G1对G2有着不错的启发性。首先,因为\(b>0,a_k\le10^9\),所以\(b\)不可能超过\(\sqrt{a}\)考虑对\(b\)分类讨论,设置一个阈值\(B\),先处理\(b=1\)的情况,其实就是取三个相同的数然后排列,可以比较简单的排序之后做到\(O(n)\)。接着手写一个哈希表用......
  • 【SD集训】20230425 T2 差(difference) 题解 CF1500F 【Cupboards Jumps】
    大家可以猜猜看为什么有两个标题,因为这个原因本文就不设密码了,被He_ren的原题创到了。吐槽一下,He_ren甚至出原题还用脚造数据,虽然数据确实比较难造。不过那两个\(O(n^2)\)老哥好像都没最后将所有数调整成非负,遗憾20。有人场切*3500却没过签到题,我不说是谁。题目描述......
  • CF1479 Div1 VP记录
    战况:别的不说,这个B1WA3发是真的精髓。A略B我们设此时在第一队队尾的为las0,在第二队队尾的为las1,要放的数为x。先考虑B1:显然有:如果las0等于x,放在第二队,如果las1等于x,放在第一队。考虑两边都不同的情况,我们想要这个x后面尽快跟上一个不同的数,依此来创造新的......
  • Nextmarkets被收购获得新生,CFI与约旦足球协会合作!
    在过去的一周内,国外外汇市场都发生了哪些引人注意的外汇新闻?以下是备受关注的外汇新闻,比如Nextmarkets被Apeiron收购获得新生、CFI成为约旦足球协会(JFA)的赞助商。具体新闻如下:1、Nextmarkets被Apeiron收购获得新生据天眼君了解,总部位于德国科隆的新经纪公司Nextmarkets目前已与Apei......
  • 乐蜂网目标独立上市 唯品会向其派驻CEO、CFO
    唯品会今日举办的发布会上,唯品会副总裁冯佳路表示,乐蜂网将会独立运营,唯品会派驻CEO、CFO。今日,唯品会副总裁冯佳路、乐蜂网副总裁辛益华接受媒体采访,解答外界疑问。控股乐蜂网后 为何又参股东方风行集团?在过去10天,唯品会与乐蜂网、东方风行集团分别发生交易。2月14日,唯品会宣......