首页 > 其他分享 >T3 玄泡面求调

T3 玄泡面求调

时间:2024-10-05 11:49:39浏览次数:5  
标签:qr 求调 int mid T3 二进制 泡面 now 29

觉得模拟赛题解还是单独放出来比较好。

A.挤压

好像不难?二进制表示下的平方展开没推出来,不然就成简单题了。

首先我们需要知道对于一个数 \(x\),把它拆成 29 位的二进制形式后,用 \(s_i\) 表示二进制下第 \(i\) 位上的数,那么其实这个数就是 \((\overline{s_{29} s_{28}...s_1 s_0})_2\),那么有

\[\begin{aligned} (\overline{s_{29} s_{28}...s_1 s_0})^2&=(\sum_{i=0}^{29} s_i\times 2^i)^2 \\ &=\sum_{i,j\in [0,29]} 2^{i+j} (if\ s_i=1\ and\ s_j=1)\end{aligned}\]

那么可以知道只有二进制下两位数同时为 1 时才会对答案有贡献,这样我们就可以枚举二进制下的两位 \(i,j\),在此基础上循环整个序列设 \(f_{k,0/1,0/1}\) 表示前 \(k\) 个数的第 \(i,j\) 位选了奇/偶个的概率,最后计算上 \(f_{n,1,1}\) 对答案的贡献即可。

注意第 \(k\) 个数选或不选的转移有以下几种情况:

  • 二进制下的这个数第 \(i,j\) 位都不为 1,那么显然它对答案,直接继承就行;

  • 第 \(i\) 位为 1 而 第 \(j\) 位不为 1,那么若选这个数,则只有第 \(i\) 位的奇偶发生变化;反之同理;

  • \(i,j\) 位都为 1,选这个数时,\(i,j\) 两位上的奇偶都发生变化,以此为例:

\[\begin{aligned}f_{k,x,y} &=f_{k-1,x\oplus 1,y\oplus 1}\times p_k (选这个数的概率) \\ &+f_{k-1,x,y}\times q_k(不选这个数的概率) \end{aligned}\]

对于每一组 \(i,j\),初始化 \(f_{0,0,0}=0\) 即可。

B.工地难题

前缀和优化:设 \(f_i\) 表示最长连续 1 的个数 \(num\le i\) 的方案数,显然对于最长连续 1 的个数恰好等于 \(i\) 的答案就是 \(f_i-f_{i-1}\)。

现在我们考虑如何求 \(f_i\)。我们可以将题目理解为插板的形式:放好了 \(n-m\) 个 0,那么现在有 \(n-m+1\) 个位置可以插入 1,每个位置上都可以放 \([0,m]\) 个 1,问方案数。

设 \(x_j\) 表示第 \(j\) 个位置放了几个 1,那么求 \(f_i\) 其实就是求 \(\sum_{j=1}^{n-m+1} x_j=m\) 的非负整数解的个数。简单容斥一下就好了。

C.星空遗迹

求调!!!

T3 求调,**12:00 之前调成功悬一袋红烧牛肉面 **

#include<bits/stdc++.h>
#define Type int
#define qr(x) x=read()
typedef long long ll;
using namespace std;

inline Type read(){
    char c=getchar(); Type x=0;
    while(!isdigit(c))c=getchar();
    while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x;
}

const int N = 2e5 + 10;
const int mod = 1e9 + 7;

int n, q, f[N];
char s[N];

int P(char A, char B){
    if(A == '#' or B == '@') return 1;
    if(A == B) return 0;
    if(A == 'R'){
        if(B == 'S') return 1;
        else return -1;
    }
    else if(A == 'S'){
        if(B == 'P') return 1;
        else return -1;
    }
    else{
        if(B == 'R') return 1;
        else return -1;
    }
}
struct tree{
        int v, pos, tag;

        bool operator < (const tree &A) const{
            return v < A.v;
        }
    }t[N<<3];
namespace Tree
{
    #define lson rt<<1
    #define rson rt<<1|1
    
    inline void pushup(int rt){
        if(t[lson].v < t[rson].v) t[rt].v = t[lson].v, t[rt].pos = t[lson].pos;
        else t[rt].v = t[rson].v, t[rt].pos = t[rson].pos;
    }

    inline void pushdown(int rt){
        if(t[rt].tag){
            t[lson].tag += t[rt].tag, t[rson].tag += t[rt].tag;
            t[lson].v += t[rt].tag, t[rson].v += t[rt].tag;
            t[rt].tag = 0;
        }
    }

    inline void build(int rt, int l, int r){
        if(l == r){
            t[rt].v = f[l], t[rt].pos = l;
            return;
        }

        int mid = (l + r) >> 1;
        build(lson, l, mid),
        build(rson, mid+1, r);
        
        pushup(rt);

        // if(t[rt].pos == 0) cout<<"CTHisSB\n";
    }

    inline void update(int rt, int l, int r, int pos, int val){
        if(pos <= l and r <= n){
            t[rt].tag += val, t[rt].v += val;
            return;
        }pushdown(rt);

        int mid = (l + r) >> 1;
        if(pos <= mid) update(lson, l, mid, pos, val);
        if(n > mid) update(rson, mid+1, r, pos, val);

        pushup(rt);
    }

    inline tree query(int rt, int l, int r, int L, int R){
        if(L <= l and r <= R) return t[rt];
        pushdown(rt); 

        int mid = (l + r) >> 1;

        if(R <= mid) return query(lson, l, mid, L, R);
        else{
            if(L > mid) return query(rson, mid+1, r, L, R);
            else return min(query(lson, l, mid, L, R), query(rson, mid+1, r, L, R));
        }
    }
}

signed main(){
    freopen("a.in", "r", stdin), freopen("a.out", "w", stdout);
    // ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

    qr(n), qr(q), cin>>(s+1);

    f[1] = 1; s[0] = '#', s[n+1] = '@';
    for(int i=2; i<=n; i++)
        f[i] = f[i-1] + P(s[i-1], s[i]);
    
    Tree::build(1, 1, n);

    while(q--)
    {
        int qr(op);
        switch(op){
            case 1:{int qr(p); char c; cin>>c; int now = P(s[p-1], c) - P(s[p-1], s[p]);
                    Tree::update(1, 1, n, p, now); now = P(c, s[p+1]) - P(s[p], s[p+1]);
                    Tree::update(1, 1, n, p+1, now); s[p] = c;  break; }
            default:{int qr(l), qr(r); cout<<s[Tree::query(1, 1, n, l, r).pos]<<"\n"; break;}
        }
    }
    

    return 0;
}

为了方便判断,我让 s[0]='#',但交到 oj 上却输出了这个:

显然是返回了 0,但是毫无缘由,代码里注释部分是输出树上所有点的 pos,结果没有为 0 的。

标签:qr,求调,int,mid,T3,二进制,泡面,now,29
From: https://www.cnblogs.com/YuenYouth/p/18447216

相关文章

  • 有奖求调!!!
    T3求调,12:00之前调成功悬一袋红烧牛肉面#include<bits/stdc++.h>#defineTypeint#defineqr(x)x=read()typedeflonglongll;usingnamespacestd;inlineTyperead(){charc=getchar();Typex=0;while(!isdigit(c))c=getchar();while(isdigit(c))x=(x......
  • T3 ! 我!改!出!来!了!
    你说得对,但是我15k分讨改出来了!#include<bits/stdc++.h>#definefo(x,y,z)for(registerint(x)=(y);(x)<=(z);(x)++)#definefu(x,y,z)for(registerint(x)=(y);(x)>=(z);(x)--)usingnamespacestd;typedeflonglongll;#definelxllinline......
  • 关于AT32A403A烧录程序时不启动的问题
    具体描述:第1块板是一边写代码一边烧录测试,一直没什么异常,整片擦除,再烧录,功能一切正常。之后就又焊了两块板,把程序烧录进去之后芯片没反应。进入仿真模式会卡在startup_at32f403a_407.s的151行LDRR0,=SystemInit后面发现一个奇怪的解决办法,就把程序大部分代码注释掉......
  • micropython +ESP32+ sht30 温湿度模块
    SHT30  1)查找SHT30芯片资料  https://www.szlcsc.com2)根据芯片资料,查得   地址为0x44或0x45    选 MeasurementCommandsforSingleShotDataAcquisitionMode,命令为 0x2c103)连线 SHT30      ESP32     D1(SCL)    4......
  • YOKOGAWA横河WT310(E)功率计使用说明
    一、基本页面介绍下面是功率计右上角指示灯的含义二、显示的字符串及对应的含义显示采用7段码进行显示,具体表现形式参考下图对于显示区域A中代表的含义三、按键定义及作用FUNCTION:每按下一次FUNCTION,都会进行显示功能的切换。四个显示页面能够显示的数据不完全一......
  • 【MX-J3-T3+】Tuple+ 题解
    一个比较自然的思路就是对于每个三元组\((u_i,v_i,w_i)\),把\((v_i,w_i)\)这个二元组放在属于\(u_i\)的vector里面。然后对于每一个\(i\in[1,n-3]\),把\(i\)的vector里面的所有二元组\((x,y)\)当作一条连接\(x,y\)的无向边,则我们的目的是在图中找出所有的三元环\(......
  • 卡不过去了,求调
    题TLE95#include<iostream>#include<map>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/hash_policy.hpp>#definelllonglong#pragmaGCCoptimize(5)#pragmaGCCoptimize("Ofast")constllN=5e3+10,p=1e9+7;......
  • 数据挖掘与机器学习(DM&ML)(PART3)
    三.DATA(Whatisdata?)1.1数据集的类型:记录型:数据矩阵:以矩阵形式呈现的数据集合,通常行代表对象(记录、实例等),列代表属性。例如,一个包含学生信息的数据集,行可以是不同的学生,列可以是学生的姓名、年龄、成绩等属性。文档数据:由文档组成的数据集,每个文档可以是一篇文章、一......
  • SpringBoot3自定义favicon.ico图标
            在学习SpringBoot项目的过程中,我想在我的个人项目中添加自定义favicon.ico的图标。但是你会发现在使用yml去配置favicon时,发现配置被废除了。如下图所示:        即使没有配置,SpringBoot也会帮我们去扫描resource包下的static,我们只需要将favicon.ico......
  • 对oceans_of_stars的T3爆标做法的基础结论的证明
    我们要证明的结论如下:\(x\)在\([1,x-1]\)中选取父亲,以这种方法构造树,节点\(x\)在其子树大小为\(i\)时的方案数为\(\binom{n-i-1}{x-2}\)。对于组合数有一个众所周知的结论:\[C_n^m=C_n^{n-m}\]然后把上面的选式转化一下,得到:\(\binom{n-i-1}{n-i-x+1}\)。还是组合数......