T3 玄泡面求调

news/2024/12/22 0:18:57/文章来源:https://www.cnblogs.com/YuenYouth/p/18447216

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

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|1inline 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 的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808403.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nuxt.js 应用中的 app:mounted 钩子详解

title: Nuxt.js 应用中的 app:mounted 钩子详解 date: 2024/10/5 updated: 2024/10/5 author: cmdragon excerpt: app:mounted 钩子在 Vue 应用的生命周期中扮演着重要角色,提供了在组件被挂载后的执行时机。通过合理利用这个钩子,我们能够提高组件的交互性、用户体验以及…

有奖求调!!!

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<…

c盘清理指南

1.清理缓存文件 快捷键Win+R输入%temp%2.磁盘清理直接win键+搜索磁盘清理3.休眠文件关闭关机时下次开机powercfg -h off 有需要休眠文件的时候再powercfg -h on 4.临时文件 设置→系统→存储→临时文件,删除! 5.把ubuntu从c移到d出现0x80073cf6错误代码 https://www.yundongf…

轻松找到并查看织梦CMS的数据库配置文件,从而获取数据库连接信息

使用FTP工具连接到服务器。 导航到 /var/www/html/include 目录。 打开 config.inc.php 文件。使用SSH连接到服务器。 切换到相应目录:bashcd /var/www/html/include使用文本编辑器打开文件:bashvi config.inc.php通过以上步骤,你可以轻松找到并查看织梦CMS的数据库配置文件…

使用ValueConverters扩展实现枚举控制页面的显示

1、ValueConverters 本库包含了IValueConverter接口的的最常用的实现,ValueConverters用于从视图到视图模型的值得转换,某些情况下,可用进行反向转换。里面有一些抽象类、模板类的定义,可以继承这些类实现一些自己想要实现的功能,方便快速。像BoolToValueConverterBase、V…

【Shiro】3.Springboot实现缓存

最近已经快速入门了Shiro。对于登录、授权、认证等方法,每次都是从数据库直接查询。如果登录的人员过多,对数据库来说,是一项压力。如何减轻数据库的压力。EhCache 实现缓存 集成 Redis 实现 Shiro 缓存(推荐使用)在此之前,我们已经简单学会EhCache 和Reids的使用。 EhCa…

织梦如何数据库备份,织梦cms网站数据怎么备份与还原

织梦CMS(DedeCMS)的数据库备份和还原是非常重要的操作,可以帮助你在出现问题时快速恢复数据。下面详细介绍如何进行织梦CMS的数据库备份和还原。 一、数据库备份 1. 使用 phpMyAdmin 备份数据库登录 phpMyAdmin登录到你的网站控制面板(如 cPanel)。 找到并打开 phpMyAdmin…

【软考】3 校验码

校验码 码距概念:任意进制的两个码值之间的最小二进制位数称为校验码的码距 例如:二进制1bit位,从0到1,则码距是1,二进制2bit位 从 00 到 11 一共4个码字,但码距还是为1 可以设置 性别男为 00 女为 11两个合法码字,则该两个合法码字的最小码距为2 (间隔 01 和 10 两个)…

IOU指标

IOU:全称 intersection over union 交并比,两个区域真实框和预测框之间的交集比他们之间的总面积-交集的 IOU指标:通常用于评估计算机视觉任务中的模型性能,特别是目标检测和图像分割。一个较高的IoU值意味着模型的定位和分割精度更好。

Redis安装管理, RDB, AOF ubuntu使用

1.1 Redis 基础redis单线程处理用户请求,不用加锁。其他线程做别的工作1.2 Redis 安装 Ubuntu 安装 Redis 范例:基于官方仓库包安装 (可以安装最新版本)#官方地址 https://redis.io/docs/install/install-redis/install-redis-on-linux/#导入key [root@ubuntu2204 ~]#curl -f…

查找和管理数据库的具体步骤

登录MySQL命令行使用SSH连接到服务器。 登录MySQL命令行:bashmysql -u root -p输入MySQL root用户的密码。查看数据库列表在MySQL命令行中查看所有数据库:sqlSHOW DATABASES;选择织梦CMS数据库选择织梦CMS使用的数据库:sqlUSE dedecmsv56gbk;查看数据库表查看织梦CMS数据库中…

DedeCMS Error Track:DedeCMS错误警告:连接数据库失败

当织梦CMS(DedeCMS)出现“连接数据库失败”的错误时,可以通过以下几个步骤进行排查和解决: 1. 检查数据库配置文件打开配置文件打开织梦CMS的数据库配置文件 include/config.inc.php。 使用FTP工具或SSH连接到服务器,然后打开该文件。检查配置信息确认数据库配置信息是否正…