Yali7月集训Contest2 T1 Cube 题解
题目链接:
连我们都只有纸质题目...话说雅礼集训都是这样的吗...
大意
0维基本图形是一个点
1维基本图形是一条线段
2维基本图形是一个正方形
3维基本图形是一个正方体
4维基本图形是...
求\(n\)维基础图形中有多少个\(m\)维基础图形\((n>=m)\)并对\(998244353\)取模
分析
手玩样例打表吼啊
当然还是要暗中观察一下啦
线段变成正方形,点数变为原来两边,边数除了变为原来两倍之外还要加上原来点数所对应连起来的边
正方形变正方体也类似
于是我就yy出一个递推式\(num[x][m]=num[x-1][m]*2+num[x-1][m-1]\)
\(num[x][m]\)表示\(x\)维基础图形中含有\(m\)维基础图形的数量
然后我们可以打一张表
然后就有dalao发现了规律(我比较傻考场上都手玩出每一项能整除2的幂都没发现规律)
\(num[n][m]/2^{n-m}=C^n_m\)
然后就ok了
注意
在订正这道题时发现几个值得注意的地方
线性求逆元时我原来的方法不行
原来我这么线性求逆元
inv[i]=(-(p/i)*inv[p%i]%p);
```
结果我发现数字一大就GG了
这是大佬的线性求逆元
```
inv[i]=(ll)(p-(p/i))*inv[p%i]%p;
```
这就很稳了
一个有趣的性质
逆元的阶乘是原来数字阶乘的逆元
很有趣,好象可证
代码:
include
include
include
include
include
include
include
define ri register int
define ll long long
using namespace std;
const int maxn=100005;
const int inf=0x7fffffff;
const int p=998244353;
template inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c'-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return ;
}
int inv[maxn],twopow[maxn],fac[maxn];
inline void pre(){
inv[0]=inv[1]=1,fac[1]=1,twopow[0]=1,twopow[1]=2;
for(ri i=2;i<=100002;i++){
fac[i]=(ll)fac[i-1]i%p;
inv[i]=(ll)(p-(p/i))inv[p%i]%p;
twopow[i]=(ll)(twopow[i-1]<<1)%p;
//cout<<fac[i]<<' '<<inv[i]<<' '<<twopow[i]<<endl;
}
for(ri i=2;i<=100002;i++){
inv[i]=(ll)inv[i]*inv[i-1]%p;//比较神奇,逆元的阶乘是原来数的阶乘的逆元
}
return ;
}
int t;
inline int solve(int m,int n){
if(m0)return twopow[n];
if(n==m)return 1;
return (ll)fac[n]inv[n-m]%ptwopow[n-m]%p*inv[m]%p;
}
int main(){
int n,m;
read(t);
pre();
while(t--){
read(n),read(m);
printf("%d\n",solve(m,n));
}
return 0;
}
```
Yali7月集训Contest2 T1 Cube 题解的更多相关文章
- Contest2037 - CSU Monthly 2013 Oct(中南大学2013年10月月赛水题部分题解)
Problem A: Small change 题解:http://www.cnblogs.com/crazyapple/p/3349469.html Problem B: Scoop water 题 ...
- FJ省队集训DAY4 T1
直接上题解 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> ...
- FJ省队集训DAY3 T1
思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...
- 集训day15 t1 poj3728
[问题描述] 有一颗n个节点的树 每个节点上都有许多奸商在卖东西,第i个奸商的理想价格为vi,即他会以vi的价格购买或卖出一件东西 有m个人希望从树上的某个点走到另一个点,问你在只进行一次买卖(每次仅 ...
- 洛谷 4932 洛谷10月月赛II T1 浏览器
[题解] x xor y的结果在二进制下有奇数个1,等价于x与y在二进制下的1的个数之和为奇数,因为x xor y减少的1的个数一定是偶数(两个数这一位都为1,xor的结果为0,减少了2个1) 那么答 ...
- 2020牛客寒假算法基础集训营5 部分题解(BDEH)
B: 牛牛战队的比赛地(二分做法)题意:二维平面给定n个点,在x轴找一点使得到n个点距离的最大值最小. 思路:我们可以将问题转化为在x轴找到一个圆心,使得该圆包含这n个点且半径最小,这样就变成了最小圆 ...
- NOI Online #3 提高组 T1水壶 题解
题目描述 有 n 个容量无穷大的水壶,它们从 1∼n 编号,初始时 i 号水壶中装有 Ai 单位的水. 你可以进行不超过 k 次操作,每次操作需要选择一个满足 1≤x≤n−1 的编号 x,然后把 x ...
- 模拟赛18 T1 施工 题解
前言: 真的是不容易啊.这个题在考场上想到了最关键的性质,但是没写出来. 后来写出来,一直调,小错不断. 没想到改的最后一个错误是两个int 乘起来爆了int 其实最后我还是觉得复杂度很假.\(n^2 ...
- FJ省队集训DAY5 T1
思路:考试的时候打了LCT,自以为能过,没想到只能过80.. 考完一想:lct的做法点数是100W,就算是nlogn也会T. 讲一下lct的做法把:首先如果一条边连接的两个点都在同一个联通块内,那么这 ...
随机推荐
- DockerFile 简单使用
Dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本. 以 CentOS 为例(https://hub.docker.com/_/centos): FROM ...
- 1.2 位于Shell脚本第一行的#!
学习<shell脚本学习指南>一书,记录总结,便于自己回忆,希望对你有帮助! 2.4 自给自足的脚本:位于第一行的 #! 1.Shell脚本执行过程 当Shell执行一个程序时,会要求UN ...
- vs2017中信号与槽连接
在vs2012里和在Qt Creator里添加信号和槽不一样,这里把两种环境下怎么添加详细说明一下 1.在vs2012里添加信号和槽 新建一个qt的项目QtDemo 在qtdeom.h里添加槽 pri ...
- MySQL5.7 创建及查看数据库
1.创建数据库语句create database语句是在MySQL实例上创建一个指定名称的数据库.create schema语句的语义和create database是一样的. 2.语法解析 CREA ...
- manifest节点
xmlns:android属性——定义命名空间 这个属性定义了这个XML文件所使用的命名空间.如果需要指定特殊的命名空间,就需要手动编写代码,在Android Studio基本格式如下: xmlns: ...
- Smarty section、foreach控制循环次数的实现详解
<!--{ section name='i' loop=$a }--><!--{ if $smarty.section.i.index < 3 }--><!--{ ...
- 各种集合key,value能否为null
转: 各种集合key,value能否为null 2019年03月12日 13:22:58 mingwulipo 阅读数 238 HashMap key,value都可以为null static f ...
- Centos安装openjdk
转载自:https://blog.csdn.net/youzhouliu/article/details/51183115 openjdk在linux各个平台下安装源中可以找到. 命令查找安装源中有什 ...
- 转:SpringMVC 4.1 新特性(二)内容协商视图
SpingMVC的内容协商支持三种方式: 使用后缀,如json.xml后缀和处理类型的关系可以自己定义 前面说的使用Accept头 在访问时request请求的参数,比如每次请求request都会加f ...
- .Net Core WebApi上传图片的两种方式
我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// <summary> /// 上传图片,通过Form表单提交 /// </summary&g ...