NOIP模拟四
NOIP模拟四
number
题目描述
现有 \(2^n\) 个点,点编号为 \(0\sim2^n-1\)。
定义这些点的一张异或图为:
先选定一个集合 \(S\)。
对于原图上编号为 \(x\) 和编号为 \(y\) 的点,如果 \(x\oplus y\in S\),那么在 \(x\) 和 \(y\) 之间连一条无向边。
数出有多少个集合 \(S\),满足它的大小尽量小且异或图为连通图。答案对 \(998244353\) 取模。
输入格式
请从
number.in中读入数据。输入一行一个数 \(n\)。
输出格式
请将答案输出到
number.out中。输出一行,表示答案。
样例
Input 1
1
Output 1
1
Input 2
2
Output 2
3
Input 3
3
Output 3
28
Input 4
189
Output 4
952004352
Input 5
999876
Output 5
936053454
数据范围
【数据范围】
对于所有数据,保证:\(n\le 10^6\)。
测试点编号 \(n \le\) \(1\sim 3\) \(5\) \(4 \sim 6\) \(200\) \(7 \sim 10\) \(10^{6}\) 样例解释
对于第二个样例,集合 \(S\) 的大小最小是 \(2\),\(\{1,2\}\),\(\{1,3\}\),\(\{2,3\}\) 均满足条件。
转换问题:对于一个 \(x\),如果有一个 \(a\in S\),那么 \(x\) 就向 \(x\oplus a\) 连边。
我们发现,集合 \(S\) 中每个数线性无关(即不存在某个数是其余若干个数的异或和)。
证明:如果有一个 \(a\in S\),那么 \(x\) 就向 \(x\oplus a\) 连边。
那么假如又有一个 \(b\in S\),则 \(x\) 会向 \(x\oplus a\) 连边,\(x\oplus a\) 会向 \(x\oplus a\oplus b\) 连边。
这时如果有 \(a\oplus b\in S\),则 \(x\) 会向 \(x\oplus a\oplus b\) 连边,我们会发现这不是必须的,因为此时通过 \(a\) 和 \(b\) 已经让它们连边了,就不需要再有一个 \(a\oplus b\in S\) 了。 可以把 \(a\oplus b\) 删掉。
也就是说,如果一个集合 \(S\) 如果其中某个数是其余若干个数的异或和,则这个集合不是最短的,因为可以把这个数删掉。
我们又发现,集合 \(S\) 最短长度为 \(n\)。
证明:因为集合 \(S\) 中每个数线性无关,所以任选任意个数异或和都不一样,共有 \(2^n\) 种选法,去掉不选即可以组成 \(2^n-1\) 种数。
若对于任意的 \(a\in S\),有 \(a<2^n\),那么集合任选任意个数异或和都小于 \(2^n\),和上面一结合,得出集合 \(S\) 任选任意个数异或和可以组成 \(1\sim2^n-1\) 的数。
也就是以编号为 \(0\) 的节点出发,可以通过 \(S\) 的任意组合链接到 \(1\sim2^n-1\) 的节点。
可以反证当 \(S\) 长度为 \(n-1\) 时无解。
那么我们可以做一个 dp 来求这个方案数。设 \(f_i\) 为决定了集合 \(S\) 前 \(i-1\) 个数,要求第 \(i\) 个数的方案数。第 \(i\) 位可以选 \(2^n\) 种数,因为前面 \(i-1\) 位选过了的若干个异或和不能选,所以去掉 \(2^{i-1}\) 种方案。转移方程为:
\]
因为集合 \(S\) 无序,所以最后要除以 \(n!\)。
/**
* @file number.cpp
* @tag: #数学
* @author: ZnPdCo
* @date: 2023-12-28 12:54:00
* @problem: https://www.xinyoudui.com/contest?courses=685&books=676&pages=19971&fragments=63901&problemId=19061
**/
#include <cstdio>
#define ll long long
#define N 1000010
#define P 998244353
ll n;
ll ans = 1;
ll qpow(ll x, ll y) {
if(y == 0) return 1;
if(y % 2 == 1) return x * qpow(x, y-1) % P;
ll tmp = qpow(x, y/2);
return tmp * tmp % P;
}
ll npow, xpow = 1, nfact = 1;
int main() {
freopen("number.in", "r", stdin);
freopen("number.out", "w", stdout);
scanf("%lld", &n);
npow = qpow(2, n);
for(ll i = 1; i <= n; i++) {
(ans *= ((npow - xpow)%P+P)%P) %= P;
(xpow *= 2) %= P;
(nfact *= i) %= P;
}
(ans *= qpow(nfact, P-2)) %= P;
printf("%lld", ans);
}
NOIP模拟四的更多相关文章
- NOIP 模拟四 考试总结
#T1随 又是liu_................... 数列n,m个操作,每次随机取a[i],x=x*a[i]%k; 问题是求x期望%mod; 首先考虑到期望转移过程中存在%k,一般套路线性期望 ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- 2017-9-22 NOIP模拟赛[xxy][数论]
XXY 的 的 NOIP 模拟赛 4 4 —— 数学专场 A Description定义 f(x)表示 x 的约数和,例:f(12)=1+2+3+4+6+12=28给出 x,y,求Σf(i),i∈[x ...
- 2014-10-31 NOIP模拟赛
10.30 NOIp 模拟赛 时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...
- NOIp模拟赛二十八
(这是NOIp模拟赛?应该是NOI模拟赛不小心加了个p) 嗯,假装这是正经的NOIp模拟赛,从今天开始也写写题解吧(这几天被虐的惨惨) 今日情况:8+50+0=58 A题输出样例,B题正解写挂,C题不 ...
- 2019.6.20 校内测试 NOIP模拟 Day 1 分析+题解
这次是zay神仙给我们出的NOIP模拟题,不得不说好难啊QwQ,又倒数了~ T1 大美江湖 这个题是一个简单的模拟题. ----zay 唯一的坑点就是打怪的时候计算向上取整时,如果用ceil函数一 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
随机推荐
- 函数指针 int (*add)( )
原文 首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址: int Add(int x,int y) { return x+y; } int main() { printf(&quo ...
- ymal & properties 赋值特性 JSR303数据校验
基本语法 1.空格不能省略 2.以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的. 3.属性和值的大小写都是十分敏感的. key:空格value 字面量直接写在后面就可以 , 字符串默认 ...
- 深入浅出Java多线程(十二):线程池
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十二篇内容:线程池.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已经成为应对 ...
- ulimit.conf中soft和hard区别及常用配置
在Linux中,ulimit命令用于限制用户对shell资源的访问,包括进程数.文件打开数等.这些限制可以分为软限制(soft limit)和硬限制(hard limit). 软限制(soft lim ...
- PE文件手工压缩
序 本文要压缩的PE文件来自软件漏洞这门课上布置的作业,代码逻辑很简单,直接运行就能看出来,就是调库来弹两个对话窗口.笔者主要记录一下对这个文件的分析和一步步实现手工压缩的过程.在此提供原文件的下载方 ...
- linux脚本免密的方法/不用输入密码
第一种方法:使用管道(上一个命令的 stdout 接到下一个命令的 stdin):在脚本首行添加 #!/bin/bashecho password | sudo -S apt-get update 第 ...
- yum总纲
yum总纲 yum源搭建 首先本文档讲解两种搭建方式,第一有网络环境和第二种无网络环境. 第一种:有网络环境 首先 进入系统执行:以下命令,获取网络源 wget -O /etc/yum.repos.d ...
- 干货分享 | 3个Zbrush实用减面工具分享
一.使用Sculptris Pro Sculptris Pro是zbrush中的一个功能按钮,点击此工具按钮,同时将笔刷转换至standard笔刷,即可减去需要平滑的面. 点击开启Sculptris ...
- django(Ajax、自定义分页器、form组件)
一.Ajax 1 概述 异步提交局部刷新 例子:github注册 动态获取用户名实时的跟后端确认并实时展示到前端(局部刷新) 朝后端发送请求的方式 1.浏览器地址栏直接输入url回车 GET请求 2. ...
- 重新记录一下ArcGisEngine安装的过程
前言 好久不用Arcgis,突然发现想用时,有点不会安装了,所以这里记录一下安装过程. 下载Arcgis 首先,下载一个arcgis版本,我这里下的是10.1. 推荐[ gis思维(公众号)],[麻辣 ...