校内NOI模拟测试007T1 送分(score) “简单”的计数
问题描述
良心出题人准备为大家送出大量的分数。
出题人生成了一个序列,其中第\(\)个元素为\(a_i\)。
定义一个集合\(\)的分值为
\]
其中为给 定参数,()表示中所有元素的异或和,空集的异或和为0。 出题人每次会选择一个区间\([, ]\)和一个参数\(\),令第\(\)到第\(\)个元素组成的集合为\(\),出题人会送给一位同学\((, )\)的分数。 你想知道每个同学获得了多少分数,因为分数实在太多了, 你只想要知道分数对\(998244353\)取模后的结果。
题意简述
给一个序列a,设一个区间S分值为
\]
有m个询问,每次给\(l\),\(r\),\(x\),求\(F([l,r],x)\)
即,求给定区间内的所有集合的异或和*\(x^{集合大小}\)
集合为可重集合。
分析
因为式子中有一个集合大小的贡献,所以无法预处理,只能直接搞。
考虑拆位,设这个区间长度为\(n\),区间内的第k位有\(m\)个\(1\)。
若\(1\)的个数为偶数,则没有贡献。而\(0\)的贡献很好求,虽然不会对答案有直接影响,但是充当了集合的大小的一部分,所以它的贡献是一个系数。
可以计算出贡献:
\]
将无关项分离:
\]
观察到形如二项式定理
\]
的两个式子,左边的可以用二项式定理直接变成\((x+1)^n\),即
\]
那么右边的这个\(j \texttt{ mod } 2 ==1\)怎么转化呢?类似共轭,
\]
两式相减
\]
成功了!再除以\(2\)就是右半部分了。
所以答案就是
\]
用前缀和计算区间内第\(k\)位上\(1\)的个数\(m\),再加上快速幂就好了,记得\(\texttt{long long}\),取模,除以\(2\)的话记得用逆元。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define p 998244353
#define IL inline
#define re register
#define LL long long
#define ULL unsigned int
#define re register
#define debug printf("Now is %d\n",__LINE__);
using namespace std;
template<class T>inline void read(T&x)
{
char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
}
inline int read()
{
int x=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x;
}
int G[55];
template<class T>inline void write(T x)
{
int g=0;
if(x<0) x=-x,putchar('-');
do{G[++g]=x%10;x/=10;}while(x);
for(re int i=g;i>=1;--i)putchar('0'+G[i]);putchar('\n');
}
int a[100010];
LL sum[100010][32];
int n;
int m;
LL qpow(LL a,LL b)
{
int ans=1;
for(;b;b>>=1,a=a*a%p)
if(b&1) ans=ans*a%p;
return ans;
}
int main()
{
n=read();
m=read();
for(LL i=1;i<=n;i++)
{
a[i]=read();
for(int j=30;j>=0;j--)
sum[i][j]=sum[i-1][j]+((a[i]>>j)&1);
}
for(LL l,r,x,i=0;i<m;i++)
{
l=read();
r=read();
x=read();
LL ans=0;
for(LL j=30;j>=0;j--)
{
LL N=r-l+1ll,M=(sum[r][j]-sum[l-1ll][j]+p)%p;
ans=(ans+(1ll<<j)%p*qpow(x+1ll,N-M)%p*(qpow(x+1ll,M)+p-qpow((1ll-x+p)%p,M))%p*qpow(2,p-2)%p)%p;
}
cout<<ans<<endl;
}
return 0;
}
结语
多取模啊!多取模!不然的话就会……

校内NOI模拟测试007T1 送分(score) “简单”的计数的更多相关文章
- [CSP-S模拟测试]:砖块(模拟)
题目描述 在一个二维网格平面上,一个网格的坐标由其左下角的点的坐标定义$(x,y)$.在一个二维网格平面上,一个网格的坐标由其左下角的个点的坐标定义$(0,0)$的区域中,此时存在高度为$k$的初始砖 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 转 C#实现PID控制的模拟测试和曲线绘图
C#实现PID控制的模拟测试和曲线绘图 本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...
- 模拟websocket推送消息服务mock工具二
模拟websocket推送消息服务mock工具二 在上一篇博文中有提到<使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock>使用electron创建一个模拟后 ...
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]1003csp-s模拟测试58:沉淀
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
随机推荐
- Surpac 安装
修改config文件 share 文件进行整体替换 数字地质 环境配置问题总结 *http 报错! 块体生成数据暂停,点击生成验收量提交,报错生成失败!!! 解决方案:重新打开块体
- elmentui input number 数字验证
问题 需求是文本框只能输入数字.解决方案:使用正则 ,如下使用了 element-ui el-input 组件 整数 文本框只能输入整数 <el-input v-model='count' on ...
- DVWA靶场学习
暴力破解Brute Force low 输入密码就正常抓包放字典破解得了 uploading-image-528180.png medium 同样的操作发现响应速度变慢了,但是还是能暴力破解,不多说了 ...
- BUUCTF---RSA3(共模攻击)
1.题目 RSA已知e1,e2,c1,c2 2.知识 共模攻击使用相同N作为加密的模数,如果监听者获知了c1,c2的密文,那么监听者便不需要d1,d2即可解出明文m 3.解题 按照思路编写代码解题 点 ...
- 【Linux】1.1 Linux课程介绍
Linux课程介绍 1. 学习方向 linux运维工程师: 维护linux的服务器(一般大型企业) linux嵌入式工程师: linux做驱动开发,或者linux的嵌入式 linux下开发项目 2. ...
- 【Linux】远程连接Linux虚拟机(MobaXterm)
[Linux]远程连接Linux虚拟机(MobaXterm) 零.原因 有时候我们在虚拟机中操作Linux不太方便,比如不能复制粘贴,不能传文件等等,我们在主机上使用远程连接软件远程连接Linux虚拟 ...
- 【C语言】从源代码编译成可执行文件的步骤
零.流程图 flowchat st=>start: 开始 e=>end: 结束 op1=>operation: 编写源代码".c"文件 #include<s ...
- js调用datasnap rest server
场景: 有嵌套的多层json数据结构的变量,js通过post调用 datasnap rest server,会出现问题: var json = [{ stcd: system.sn, dateTime ...
- Apache DolphinScheduler 3.3.0 Alpha发布,功能增强与性能优化大升级!
近期,Apache DolphinScheduler进行了版本更新,发布了3.3.0 alpha版本.Apache DolphinScheduler 3.3.0 alpha版本在任务管理.容错能力.扩 ...
- php 根据时间设置多少小时 ,前天,昨天,多少月,多少年
public static function formatTime($time){ if (is_int($time)) { $time = intval($time); } elseif ($tim ...