Codeforces Round #470 D Picking Strings

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

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

题意:给定两个由A、B、C三个字母组成的串S、T,以及一系列串上的操作,给出Q的询问,询问S[ a, b]可否经过一系列操作生成T[ c, d]。

思路:根据数据规模,必须要离线构建一些东西来解决该问题。

首先,观察给出的操作,可以发现如下规律:

1. C和B可以相互转化

2. B之前的A可以任意增添

3.  B只能增加,且B的每次增加都为偶数

所以,不妨根据前后两串中B的数量进行分类讨论:

1. 若第一个串内B的数量大于第二串,则必然不行。

2. 若两者相等,则判断所有B之后A的数量,若前者的这样的A的数量 - 后者 是3的倍数则可行,否则不可行。

3. 若前者小于后者,先判断差是否为偶数,若不是偶数则不可行。如果是偶数,则判断所有B之后A的数量,若前者大于后者且差不为0则必然可行,若两者这样的A的数量相等,且前者B的数量不为0则可行,否则不可行。

剩下的工作即计算B的数量以及这样的A的数量,看代码即可。

AC代码如下:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>


using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

string S, T;
int cnts[MAXN];
int cntgs[MAXN];
int cntt[MAXN];
int cntgt[MAXN];
int Q;


int main()
{
    FSIO;
    cin>>S>>T;
    for(int i=0;i<S.length();++i)
        if(S[i]=='B'||S[i]=='C')   cnts[i+1]=cnts[i]+1;
        else    cnts[i+1]=cnts[i], cntgs[i+1] = cntgs[i]+1;
    for(int i=0;i<T.length();++i)
        if(T[i]=='B'||T[i]=='C')   cntt[i+1]=cntt[i]+1;
        else    cntt[i+1]=cntt[i], cntgt[i+1] = cntgt[i]+1;
    /*for(int i=1;i<=S.length();++i)   cout<<cnts[i]<<" ";
    cout<<endl;
    for(int i=1;i<=T.length();++i)   cout<<cntt[i]<<" ";
    cout<<endl;*/
    cin>>Q;
    int l1, l2, r1, r2;
    for(int i=1;i<=Q;++i)
    {
        cin>>l1>>r1>>l2>>r2;
        if((cnts[r1]-cnts[l1-1])>(cntt[r2]-cntt[l2-1])) cout<<0;
        else if((cnts[r1]-cnts[l1-1])==(cntt[r2]-cntt[l2-1]))
        {
            int tmp = min(cntgs[r1], r1-l1+1);
            int tmp2 = min(cntgt[r2], r2-l2+1);
            if(tmp>=tmp2&&(tmp-tmp2)%3==0) cout<<1;
            else    cout<<0;
        }
        else
        {
            int cntb = cntt[r2]-cntt[l2-1]-(cnts[r1]-cnts[l1-1]);
            if(cntb%2==0)
            {
                int tmp = min(cntgs[r1], r1-l1+1);
                int tmp2 = min(cntgt[r2], r2-l2+1);
                if(tmp>tmp2||(tmp==tmp2&&(cnts[r1]-cnts[l1-1])))   cout<<1;
                else    cout<<0;
            }
            else    cout<<0;
        }
    }
    cout<<endl;
    return 0;
}

 

[FNT][DP][矩阵] Codeforces 947 E - Perpetual Subtraction SolutionSolutionSolution 暴力DP很简单fi,j=∑k≥jfi−1,kkfi,j=∑k≥jfi−1,kkf_{i,j}=\sum_{k\ge j}{f_{i-1,k}\over k} 因为转移形式都一样,可以写出转移矩阵。A=⎡⎣⎢⎢⎢⎢⎢⎢1n+10⋮01n+11n⋮0⋯⋯⋱⋯1n+11n⋮1⎤⎦⎥⎥⎥⎥⎥⎥A=[1n+11n+1⋯1n+101n⋯1n⋮⋮⋱⋮00⋯1... 阅读详情

相关推荐

Mac上Ollama服务IP访问失败的3种修复方法(含永久生效配置)

本文详细介绍了Mac上Ollama服务IP访问失败的3种修复方法,包括临时环境变量覆盖、永久Shell配置修改及进阶排查技巧。重点解析了OLLAMA_HOST环境变量的配置原理,帮助开发者解决Connection refused问题,实现局域网IP访问Ollama服务的需求。

weixin_29209805的博客 182

CF923E Perpetual Subtraction

https://www.luogu.com.cn/problem/CF923E 感谢这题让我学会了矩阵对角化 和 快速的矩阵快速幂 题目已经给了一个线性变换了,要你求它的kkk次方 不难想到矩阵对角化 Ak=Q(Q−1AQ)kQ−1A^k=Q(Q^{-1}AQ)^{k}Q^{-1}Ak=Q(Q−1AQ)kQ−1 中间那个Q−1AQQ^{-1}AQQ−1AQ是个对角矩阵,kkk次方直接O(nlogk)O(nlogk)O(nlogk)算 通过之前的学习,可以发现Q−1AQQ^{-1}AQQ−1AQ对角线上的值

lahlah的博客 412

论文理解【LLM-Agent】——【SkillOpt】Executive Strategy for Self-Evolving Agent Skills

SkillOpt 将 agent skill 从人工或一次性 prompt artifact 转化为可验证、可控、可迁移的文本空间“可训练状态”,通过有界编辑、验证门控、拒绝编辑反馈和 slow/meta update,在不更新模型权重的情况下显著提升多类 agent 任务表现

佚失的诗篇 477

[CF947E]Perpetual Subtraction

果然不能丝儿门弄数啊😣

七代目鸽影 375

Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

呜啊怎么又是数学了啊。。。数学比例1633=0.4848\frac{16}{33}=0.48483316​=0.4848 题目链接: https://codeforces.com/contest/947/problem/E 题意: 有一个[0,n][0,n][0,n]的随机数xxx初始为iii的概率为pip_ipi​. mmm次操作每次从[0,x][0,x][0,x]中等概率随机选择一个数yyy把...

suncongbo's blog 795

【CF932E】Perpetual Subtraction(NTT,线性代数)

【CF932E】Perpetual Subtraction(NTT,线性代数) 题面 洛谷 CF 题解 设\(f_{i,j}\)表示\(i\)轮之后这个数恰好为\(j\)的概率。 得到转移:\(\displaystyle f_{i,j}=\sum_{k=j}^{n}f_{i-1,k}*\frac{1}{k+1}\)。 看成生成函数就有\(\displaystyle F_i(x)=\sum_{j=0...

weixin_30709635的博客 202

【CF923E】Perpetual Subtraction【生成函数】【积分推式子】【NTT卷积】

题意:有一个整数x∈[0,n]x\in[0,n]x∈[0,n],取iii的概率为pip_ipi​。执行mmm次操作,每次把xxx等概率变成[0,x][0,x][0,x]中的一个整数,求操作完后等于每个数的概率。模998244353998244353998244353。 n≤105,m≤1018n\leq 10^5,m\leq10^{18}n≤105,m≤1018 显然有一个dp式子 fi,j=∑k=jnfi−1,kk+1f_{i,j}=\sum_{k=j}^n\frac{f_{i-1,k}}{k+1}fi,

Lstdo的博客 459

CF923E Perpetual Subtraction 题解

洛谷传送门 设f(τ,i)f(\tau,i)f(τ,i)表示第τ\tauτ次操作进行之前,也就是第(τ−1)(\tau-1)(τ−1)次操作进行之后得到的数是iii的概率。那么f(1,i)=pif(1,i)=p_if(1,i)=pi​,我们需要对于每个iii求出f(m+1,i)f(m+1,i)f(m+1,i)。 不要问我为什么用τ\tauτ这个奇怪的字母 考虑一次操作带来的影响:显然有 f(τ+1...

GKxx 512

Codeforces Round #470-C-Producing Snow(二分)

题意:给你n堆雪,每堆有ai单位,第i堆从第i天开始融化,并从此往后每天能融化bi单位(当然,若总量在改天小于bi,呢就是融化剩下的单位量),然后问你每天融化的雪的总量。 题解:对于每天最多能融化的雪量求一波前缀和,然后对于每一堆雪量二分查找在那天能融化完,然后用类似区间覆盖的思想标记每天会融化多少倍的bi即可,还有就是若之前某一堆的雪量小于bi,则直接加到该天的答案里即可。 #include

信仰.的博客 533

Codeforces Round#470

CF948A Protect Sheep(模拟)没看到输出“Yes”卡了二十分钟【再见】 CF923A Primal Sport(线性素数筛,数学) CF923B Producing Snow(树状数组+二分/平衡树) CF923C Perfect Security(贪心+Trie) CF923D Picking Strings(手玩题)

Icefox的博客 481

Codeforces Round #470-E-Picking Strings(想法题)

题意:给你一个串s和一个串t,然后有t次查询,每次查询输入四个数,问你第一个串中从x到y这一段能否通过操作变成第二个串的xx到yy这一段,具体有四种操作,每种操作次数和次序随意。 (1)A->BC  (2)B->AC  (3)C->AB  (4)AAA->空串 题解:我们仔细分析一下这四种操作,首先根据2和3我们很容易发现B和C是等价的,可以相互转换,通过2,3,4这三种操作可以发现我们可以将

信仰.的博客 464

Codeforces Round #470 (前缀和+二分查找+树状数组)

C. Producing Snowtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputAlice likes snow a lot! Unfortunately, this year's winter is already over, and she...

sher杨的博客 275

Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)C. Producing Snow

http://codeforces.com/contest/948/problem/C C. Producing Snow Alice likes snow a lot! Unfortunately, this year’s winter is already over, and she can’t expect to have any more of it. Bob has thus b...

WHITE ALBUM 512

A. Wrong Subtraction

time limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputLittle girl Tanya is learning how to decrease a number by one, but she does it wrong with a number ...

无知的我 990

Codeforces Round #470 div2 C

C. Producing Snowtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputAlice likes snow a lot! Unfortunately, this year's winter is already over, and she...

ACM_e的博客 814

Codeforces Round #470-D-Perfect Security(01字典树)

题意:给你两个数组,对于每个ai,在b数组中找到一个元素与其异或,得到的值为ci,同时删除bi,然后让你输出组成字典序最小c数组 题解:裸的01字典树,对于每个ai,找能和ai异或出最小值的bi即可,暴力超时,所以可将每个bi插入字典树中,因为每次找到一个bi后要删除bi,但是对于删除操作我觉得过于繁琐,因此我是标记每个节点出现的次数,这样就能无脑不重复的找到当前最佳的bi(ps:比赛时死于su

信仰.的博客 950

Codeforces Round #470 div2 C(优先队列+前缀和)

C. Producing Snowtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputAlice likes snow a lot! Unfortunately, this year's winter is already over, and she...

阿狸的博客 874

Codeforces #470 Div. 2 E】Picking Strings

problem outputstandard output Alice has a string consisting of characters ‘A’, ‘B’ and ‘C’. Bob can use the following transitions on any substring of our string in any order any number of times: A ...

路人黑的纸巾 571

ACM-ICPC 2018 焦作赛区网络预赛(A B E F G H I K L)

ACM-ICPC 2018 沈阳赛区网络预赛(待更新) A. Magic Mirror 题目链接 题面: Jessie has a magic mirror. Every morning she will ask the mirror: ‘Mirror mirror tell me, who is the most beautiful girl in the world?’ If...

LFhase‘s Blog 2663

Codeforces Round #464 (Div. 2) C Convenient For Everybody

题目链接:点击打开链接题意:一天n个小时,全球n个时区,当第一个时区当地时间为1时,第i个时区当地时间为i。现在要举办某种比赛,历时1小时,每个时区有a_i个人参加。给定s和f,如果对于某个时区i,(均为当地时间)比赛开始时间不早于s且结束时间不迟于f则当地选手都会参加这个比赛。现在要求某个对第1时区的时间,使得比赛在这个时间开始时全球参加的人数最多。思路:时区换算比较麻烦,比如n=5时,时间的推...

LFhase‘s Blog 1520
上一篇: Codeforces Round #470 D Perfect Security
下一篇: Codeforces Round #472 A-D
LFhase
博客等级 码龄10年 9粉丝 60原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值