首页 > 其他分享 >2023牛客多校2

2023牛客多校2

时间:2023-07-22 11:14:17浏览次数:27  
标签:二进制 int 2023 rx 多校 len 牛客 lst ans

H.0 and 1 in BIT

题意

给一串操作字符串,其中包含操作\(A,B\):

  1. \(A\)代表将二进制每一位反转。
  2. \(B\)代表将二进制加\(1\)。且当二进制为全\(1\)时,二进制变为全\(0\)

现在包含多次询问,每次询问给定一个区间(区间需要计算得到),给定一个初始二进制\(x\),问你二进制在经过操作字符串对应区间操作后的二进制串是什么?

题解思路

让\(len\)代表\(x\)的位数,\(T\)代表\(len\)位数的循环周期,即\(T=2^{len}\),那么操作\(A,B\)可被表示为公式。\(A\)表示\((T-1-x)\%T\),\(B\)表示为\((x+1)\%T\)。

至此可以发现,当\(BAB\)中第一个\(B\)贡献为\(1\)时,后一个\(B\)的贡献被\(A\)反转为\(-1\)。根据这个规律可以前缀和统计\(B\)的贡献。

而对于\(A\),我们发现当经过奇数次\(A\)操作后,值反转一次。反之,则不操作。

源代码

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
#define int long long
#define rep(i, from, to) for(int i=from;i<=to;++i)
#define nep(i, from, to) for(int i=from;i>=to;--i)
//#define tt(i) cout<<"tt "<<i<<'\n';
#define tt(i)
const int inf = 1e18, N = 2e5 + 7, e9 = 1e9;

int pre[N], pre2[N];
int stat[N];
int lst[N];


void solve() {
    int n, q;
    cin >> n >> q;

    string s;
    cin >> s;
    s = ' ' + s;

    pre[0] = pre2[0] = 0;
    int op = 1;
    rep(i, 1, n) {
        pre2[i] = pre2[i - 1];
        pre[i] = pre[i - 1];

        if (s[i] == 'B') {
            stat[i] = op;
            pre[i] = pre[i - 1] + op;
        } else {
            pre2[i] = pre2[i - 1] + 1;
            op = -op;
        }
    }

    if (s[1] == 'B') lst[1] = 1;
    else lst[1] = 0;
    
    rep(i, 2, n) {
        if (s[i] == 'B') lst[i] = i;
        else lst[i] = lst[i - 1];
    }

    int ans = 0;
    while (q--) {
        int l1, r1;
        string x;
        cin >> l1 >> r1 >> x;
        auto l = min((ans ^ l1) % n + 1, (ans ^ r1) % n + 1);
        auto r = max((ans ^ l1) % n + 1, (ans ^ r1) % n + 1);

        int len = x.size();
        assert(l <= n && r <= n);
        int adB = pre[r] - pre[l - 1], rv = (pre2[r] - pre2[l - 1]) % 2;
        if(pre2[l-1]&1) adB=-adB;
        ll T = 1ll << len;
        ll rx = 0, tem = T >> 1;
        for (auto c: x) {
            if (c == '1') {
                rx += tem;
            }
            tem >>= 1ll;
        }

        rx = ((rx + adB) % T + T) % T;
        if (rv) {
            rx = (T - rx - 1ll) % T;
        }
        ans = rx;
        tem = T >> 1ll;
        rep(ji, 1, len) {
            if (rx >= tem) {
                cout << 1;
                rx -= tem;
            } else cout << 0;
            tem >>= 1ll;
        }
        cout << '\n';
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int _ = 1;
//    cin >> _;
    while (_--) solve();

    return 0;
}

标签:二进制,int,2023,rx,多校,len,牛客,lst,ans
From: https://www.cnblogs.com/FlyBeans/p/nowcoder2023_2.html

相关文章

  • 【大联盟】20230626 集查并(dsu) 题解 AT_toyota2023spring_final_g 【Git Gud】
    【大联盟】20230626集查并(dsu)题解AT_toyota2023spring_final_g【GitGud】zyx/bx题目描述here题解由于这场出了T2、验了T3(顺序是反的),所以赛时一直在想这个题,不过很遗憾不会。相当有意思的题。考虑合并两个点\(x,y\)时,对以后产生的贡献为\(\max\{f_x,f_y\}\),\(f_x......
  • 【大联盟】20230703 T2 开心的序列(sequence) 题解 AT_agc049_f 【[AGC049F] Happy Sequ
    zak/bx恐怖zak将这题加强,出到模拟赛。直接把\(A_i,B_i\le10^5,C_i\le5\)变成了\(A_i,B_i,C_i\le10^9\)。非常恐怖。题目描述点击膜拜zhoukangyang。题解重新再理解一遍。我们维护\(p(x)=\sum_i|a_i-x|+|b_i-x|\),那么就相当于要求\(\forallx,p(x)\le0\),也就......
  • 2023 暑假牛客多校
    时隔一年,多校又至。还是和jimmywang与shihoghmean组队。只可惜后面要文化课了,可能打不完。只记一些赛时想过的和听完题解后会的妙妙题:7.17“范式杯”2023牛客暑期多校训练营1......
  • 2023.07.21 SMU Summer 2023 Contest Round 5
    2023.07.21SMUSummer2023ContestRound5A.PointsinSegments给n个,1~m的子集,求1~n中所有没在这些子集中出现过的数字把子集区间合并为集合s,输出1~n中没有在s中出现过的数#include"bits/stdc++.h"usingnamespacestd;typedefpair<int,int>PII;intn,m;vector<P......
  • 【专题】2023年中国母婴营养品市场洞察报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33286原文出处:拓端数据部落公众号本报告合集主要研究和探讨了中国母婴营养品行业近年来的发展历程、市场现状、消费者行为习惯以及未来的发展趋势。研究的目的是全面解读母婴营养品行业的发展情况、市场现状以及关键营养素,并对母婴营养品的消费人......
  • 2023.7.21
    今天和室友约好早起去跑步了五点半起床 !体验了一下早起的世界,其实外面当时天已经亮了,而且路上已经有了很多人然后和室友打着语音一边唠嗑一边慢跑其实还是蛮开心的,虽然起床很痛苦……明天继续!......
  • 关于高精度计算的研究(1)——高精度加、减运算(2023-07-21)
    1、引入在C++中,我们常会需要做加减乘除等等运算首先我们来熟悉一下c++的计算符号:+(加号)             -(减号、负号)                  *(乘号)                    /(除号......
  • 20230720练习总结
    CF1523HHoppingAroundtheArray写在前面:毒瘤翻译!!!原题面有一句"Agrasshoppercanhoparoundthesellsaccordingtothefollowingrule"翻译过来就是不能删去起点和终点,翻译题面没有这句话!!!调了一个下午,答案一直比标答小!!!先忽略询问的终点,那么从\(i\)起跳,一定是跳到\([......
  • 2023 暑假集训模拟赛题解
    目录CSP模拟1CSP模拟2FSYOCSP模拟1来自学长的馈赠2.CSP模拟2F考虑\(x\)只能在\(a_1\oplusb_i\)里选,那么分别代入暴力检验即可.时间复杂度\(\tilde\Theta(n^2)\),可以通过.S考虑交换同色的部分一定不优,所以同色字符的相对位置一定是不变的.那么操作序列......
  • 20230721巴蜀暑期集训测试总结
    T1似乎想复杂了。搓了一个\(O(Q\sqrt{n\logn})\)的做法,成功跳过正解。结果考后发现普通分块就可以\(O(Q\sqrtn)\)。而且似乎还WA了一些点。根据题意可以发现\(b_i\)为\(1\)当且仅当\(i\)在二进制下有奇数个\(1\)。这个可以用来快速求\(b_i\)。再观察性质,发现\(......