牛客NOIP2021提高组OI赛前模拟赛第一场T3——与巨(数学)

与巨

  • description
  • solution
  • code

description

【题目描述】
定义无穷序列f:f1=1,fn=fn−1∗2+1f:f_1=1,f_n=f_{n-1}*2+1f:f1=1,fn=fn12+1

定义函数G(x)=min⁡fi≥x(fi)G(x)=\min_{f_i\ge x}(f_i)G(x)=minfix(fi)

定义dpc,0=0,dpc,i=max⁡(dpc,i−1,[((i∗c)&G(i))=i]∗i)dp_{c,0}=0,dp_{c,i}=\max(dp_{c,i-1},\big[\big((i*c)\&G(i)\big)=i\big]*i)dpc,0=0,dpc,i=max(dpc,i1,[((ic)&G(i))=i]i)

∑i=0ndpc,i(mod998244353)\sum_{i=0}^ndp_{c,i}\pmod {998244353}i=0ndpc,i(mod998244353)

【输入格式】
第一行输入一个整数T,表示测试用例的组数。
每组测试用例输入一行包含两个整数n, c。
其中𝐧以二进制形式表示,且𝐧不含有前导 0。
【输出格式】
对于每组测试用例输出一行一个整数表示答案。
【样例 1 输入】

5
1001 1
11111 1
101010111101 8999
10100101111010101 799
10010010 233

【样例 1 输出】

45
496
2835797
707482963
9940  

【数据范围】

1≤T≤10;1≤∣n∣≤107,1≤c≤1018,∑i=1T∣n∣≤1071\le T\le 10;1\le |n|\le 10^7,1\le c\le 10^{18},\sum_{i=1}^T|n|\le 10^71T10;1n107,1c1018,i=1Tn107

solution

观察到fif_ifi的生成递推式,最后结果一定形如000..00011...111

G(i)=2t+1−1G(i)=2^{t+1}-1G(i)=2t+11G(i)G(i)G(i)必然是这种形式,ttt为二进制最高位

x&G(i)x\&G(i)x&G(i)相当于xmod 2t+1x\ \text{mod}\ 2^{t+1}x mod 2t+1

则,有(i∗c)&G(i)=i⇔(i∗c)mod 2t+1=i⇔i∗(c−1)mod 2t+1=0(i*c)\&G(i)=i\Leftrightarrow (i*c)\ \text{mod}\ 2^{t+1}=i\Leftrightarrow i*(c-1)\ \text{mod}\ 2^{t+1}=0(ic)&G(i)=i(ic) mod 2t+1=ii(c1) mod 2t+1=0

2p∗q=c−12^p*q=c-12pq=c1来重新表示,则iii必须含有因子2t+1−p2^{t+1-p}2t+1p

m=∣n∣m=|n|m=n,可以枚举ttt

  • t<m−1t<m-1t<m1

    [2t,2t+1−1][2^t,2^{t+1}-1][2t,2t+11]内的所有数都在nnn之内,其最高位均为ttt

    g=t+1−pg=t+1-pg=t+1p,那么iii含有因子2g2^g2g意味着iii的低ggg位全为000

    这样的数为2t,2t+2g,...,2t+x∗2g2^t,2^t+2^g,...,2^t+x*2^g2t,2t+2g,...,2t+x2g2t+(x+1)2g=2t+12^t+(x+1)2^g=2^{t+1}2t+(x+1)2g=2t+1

    这是一个x+1x+1x+1项的等差数列,利用公式容易求得

    同时每个数都会对最终答案贡献2g2^g2g次【对于G(i)=2aG(i)=2^aG(i)=2a,那么G(i+k,k∈[1,2a])=2a+1G(i+k,k\in[1,2^a])=2^{a+1}G(i+k,k[1,2a])=2a+12a+12^{a+1}2a+1都会贡献,一共是2a2^a2a

  • t=m−1t=m-1t=m1,由于2t+1>n2^{t+1}>n2t+1>n,但需要满足2t+x∗2t≤n⇒x=⌊n2g⌋−2t−g2^t+x*2^t\le n\Rightarrow x=\lfloor\frac{n}{2^g}\rfloor-2^{t-g}2t+x2tnx=2gn2tg

    对这个x+1x+1x+1项的等差数列同样方法计算贡献后,最后一项被计算了2g2^g2g次,计数范围为[2t+x∗2g,2t+(x+1)∗2g−1][2^t+x*2^g,2^t+(x+1)*2^g-1][2t+x2g,2t+(x+1)2g1]

    此时多计数了2t+(x+1)∗2g−1−n2^t+(x+1)*2^g-1-n2t+(x+1)2g1n次,减去多的贡献即可

code

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define int long long
#define mod 998244353
#define maxn 10000005
int mi[maxn];
char s[maxn];
const int inv2 = ( mod + 1 ) >> 1;int calc( int a, int d, int n ) {return ( a * n % mod + n * ( n - 1 ) % mod * d % mod * inv2 % mod ) % mod;
}signed main() {freopen( "and.in", "r", stdin );freopen( "and.out", "w", stdout );mi[0] = 1;for( int i = 1;i < maxn;i ++ ) mi[i] = ( mi[i - 1] << 1 ) % mod;int T, n, c;scanf( "%lld", &T );while( T -- ) {scanf( "%s %lld", s + 1, &c );n = strlen( s + 1 );c --;int ans = 0;if( ! c ) {for( int i = 1;i <= n;i ++ )ans = ( ( ans << 1 ) + ( s[i] ^ 48 ) ) % mod;printf( "%lld\n", ans * ( ans + 1 ) % mod * inv2 % mod );}else {if( c & 1 ) { printf( "0\n" ); continue; }else {int p = 0;while( ! ( c & 1 ) ) c >>= 1, p ++;for( int t = 0;t < n;t ++ ) {int g = max( 0ll, t + 1 - p );if( t < n - 1 )ans = ( ans + mi[g] * calc( mi[t], mi[g], mi[t + 1 - g] - mi[t - g] ) ) % mod;else {int k = 0;for( int i = 1;i <= n - g;i ++ ) k = ( ( k << 1 ) + ( s[i] ^ 48 ) ) % mod;//n/2^g下取整 int x = ( k - mi[t - g] ) % mod; ans = ( ans + mi[g] * calc( mi[t], mi[g], x + 1 ) ) % mod;//x=k-2^{t-g}=k-mi[t-g] x+1项 int lst = ( mi[t] + x * mi[g] ) % mod;//计算末项 2^t+x*2^gint l = 0;int r = ( lst + mi[g] - 1 ) % mod;//末项的下一项 2^t+(x+1)*2^g  还有一个-1 for( int i = 1;i <= n;i ++ ) l = ( ( l << 1 ) + ( s[i] ^ 48 ) ) % mod; //-n ans = ( ans - ( r - l ) * lst ) % mod;}}}printf( "%lld\n", ( ans + mod ) % mod );}}return 0;
}

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

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

相关文章

ASP.NET Core 自定义认证方式--请求头认证

Intro最近开始真正的实践了一些网关的东西&#xff0c;最近写几篇文章分享一下我的实践以及遇到的问题。本文主要介绍网关后面的服务如何进行认证。解决思路网关可以做一部分的认证和授权&#xff0c;服务内部有时候也会需要用户的信息&#xff0c;这时该怎么办呢&#xff0c;我…

2016ICPC沈阳站

2016ICPC沈阳站 题号题目知识点难度AThickest Burger贪心签到BRelative atomic mass贪心签到CRecursive sequence矩阵快速幂快铜DWinning an AuctionECounting Cliquesdfs剪枝稳铜快银FSimilar RotationsGDo not pour outHGuessing the Dice RollIThe ElderJQuery on a graphK…

P7516 [省选联考 2021 A/B 卷] 图函数

解析 纯纯的人类智慧题。 关键性质&#xff1a;vvv 可以在计算 f(u,G)f(u,G)f(u,G) 时产生贡献&#xff0c;当且仅当 GGG 中 u,vu,vu,v 之间可以通过 [v,n][v,n][v,n] 的点互相到达。 充分性较为显然&#xff0c;编号更大的点不会比 vvv 先删去&#xff0c;所以必然在 vvv 时…

开发语言大爆炸的时代,究竟谁主沉浮?

开发语言大爆炸的时代&#xff0c;究竟谁主沉浮&#xff1f;当这个系列本来打算是写人物的&#xff0c;而且是写我们身边那些优秀的开发者&#xff0c;然而当第一篇文章&#xff0c;写的是关于我们长沙.NET社区的优秀开发者邹琼俊&#xff0c;发表在博客园之后&#xff0c;有一…

2021牛客NOIP提高组OI赛前模拟赛第一场T2——牛牛和数组操作(区间dp)

牛牛和数组操作descriptionsolutioncodedescription 【题目描述】 有n 2个整数a0, a1, . . . , an, an1&#xff0c; a0 an1 0。你需要做确切地n次操作&#xff0c;每次 操作为以下形式&#xff1a; 选择一个整数x满足ax ≠ 0&#xff0c;使得ax 0&#xff0c;令lmaxi<…

杜教BM模板(用于求线性递推公式第N项)

通过手动求出线性递推公式的前几项&#xff08;一般要前8项&#xff09;&#xff0c;杜教BM模板可以直接求第n项是多少。。我才知道&#xff0c;离谱。。对于我来说是妙计 //递推公式黑科技 #include<bits/stdc.h> using namespace std; ///#define X first //#define Y…

Asp.NETCore轻松学系列阅读指引目录

前言耗时两个多月&#xff0c;坚持写这个入门系列文章&#xff0c;就是想给后来者更好更快的上手体验&#xff0c;这个系列可以说是从入门到进阶&#xff0c;适合没有 .NETCore 编程经验到小白同学&#xff0c;也适合从 .NET Framework 迁移到 .NETCore 的朋友。本系列从安装环…

P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)

解析 给出 n,x,pn,x,pn,x,p 和一个 mmm 次的多项式 f(k)f(k)f(k)&#xff0c;求解&#xff1a; ∑k0nf(k)xk(nk)modp\sum_{k0}^nf(k)x^k\binom n k\mod pk0∑n​f(k)xk(kn​)modp 把多项式拆成若干个单项式&#xff0c;现在就是要求&#xff1a; ∑k0nkpxk(nk)\sum_{k0}^nk^px…

CF750G New Year and Binary Tree Paths(数位dp二进制+数学)

CF750G New Year and Binary Tree Pathsdescriptionsolutioncodedescription 题目链接 一颗无穷个节点的完全二叉树。 求有多少条树上的简单路径编号和为 s。 s≤1e15s\le 1e15s≤1e15 solution 一条单链的情况 考虑从节点xxx开始走一条节点个数是hhh的链&#xff08;链长为…

eShopOnContainers 知多少[9]:Ocelot gateways

引言客户端与微服务的通信问题永远是一个绕不开的问题&#xff0c;对于小型微服务应用&#xff0c;客户端与微服务可以使用直连的方式进行通信&#xff0c;但对于对于大型的微服务应用我们将不得不面对以下问题&#xff1a;如何降低客户端到后台的请求数量&#xff0c;并减少与…

Acwing 1072. 树的最长路径

Acwing 1072. 树的最长路径 题意&#xff1a; 每个边有权值&#xff0c;求树的直径 题解&#xff1a; 两遍dfs可以求&#xff0c;这里用树形dp的方法&#xff0c;我们将1作为根节点来看这棵树 我们可以将点看作是钉子&#xff0c;边就是挂在钉子上的绳子&#xff0c;我们只…

模板:矩阵树定理

文章目录前言解析无向图有向图根向树叶向树code带权图code所谓矩阵树定理&#xff0c;就是用矩阵解决树问题的定理。 &#xff08;逃&#xff09; 前言 神奇科技。 之前一直没有写博客&#xff0c;觉得还是写一发比较好。 证明什么的是不可能会的 背下来背下来&#xff01; …

P2016 战略游戏

P2016 战略游戏 题意&#xff1a; 他要建立一个古城堡&#xff0c;城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵&#xff0c;使得这些士兵能了望到所有的路。 注意&#xff0c;某个士兵在一个结点上时&#xff0c;与该结点相连的所有边将都可以被了望…

.NET/C# 获取一个正在运行的进程的命令行参数

在自己的进程内部&#xff0c;我们可以通过 Main 函数传入的参数&#xff0c;也可以通过 Environment.GetCommandLineArgs 来获取命令行参数。但是&#xff0c;可以通过什么方式来获取另一个运行着的程序的命令行参数呢&#xff1f;进程内部获取传入参数的方法&#xff0c;可以…

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界(并查集+第二分块)

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界descriptionsolutioncodedescription 五彩斑斓的世界 CF896E Welcome home,Chtholly 五彩斑斓的世界是加强版&#xff0c;所以下面的题解部分是写的加强版 solution 第二分块 查询操作中把>x>x>x的数全都…

Defuse the Bombs Gym - 102822D

Defuse the Bombs Gym - 102822D 题目&#xff1a; 给你n个数&#xff0c;现在每轮会有三个操作&#xff1a; 1.选择一个数&#xff0c;使他加一 2.所有数减一 3.当有一个数变成负数时结束操作&#xff0c;否则回到第一步 问最多能进行几次第一步&#xff1f; 题解&#xff…

P4364 [九省联考 2018] IIIDX(线段树、贪心)

解析 感觉不至于黑的题。 然而我并不会做 did_idi​ 互不相同的时候直接无脑贪心即可&#xff0c;这样55分的好成绩就到手了。&#xff08;交完发现可以骗到60&#xff09; 滚榜级的良心分了属于是。 考虑有相同时如何做。 先把值降序排序&#xff0c;然后维护一棵线段树&…

CF1491H Yuezheng Ling and Dynamic Tree(分块)

CF1491H Yuezheng Ling and Dynamic Treedescriptionsolutioncodedescription 题目链接 solution 非常清新的小分块题了 前提&#xff1a;将序列分成n\sqrt{n}n​块&#xff0c;每块有n\sqrt{n}n​个数&#xff0c;记第iii个块的左右边界为Li,RiL_i,R_iLi​,Ri​&#xff0…

听说,霸都.NET技术社区准备搞线下聚会了?

.NET Core实战项目交流群日常交流嗨&#xff0c;你听说了没有&#xff1f;霸都.NET技术社区准备搞线下聚会了&#xff01;啥时候的事情啊&#xff1f;最近才知道的消息啊&#xff01;那你是从哪里知道的消息呢&#xff1f;.NET Core项目实战交流群&#xff08;637326624&#x…

Knowledge is Power Gym - 102822K

Knowledge is Power Gym - 102822K 题意&#xff1a; 给你一个数n&#xff0c;让你将n分解成一些互质的数&#xff0c;然后这些数的最大值减最小值要求最小&#xff0c;如果不行输出-1&#xff0c;否则输出最大值减最小值的最小情况 题解&#xff1a; 具体做法是通过枚举大…