@[TOC]2021年浙大城市学院新生程序设计竞赛
H Hile and Subsequences’ MEX
H 知识点 :快速幂 排列组合
题意: 给出一个数 n ,得到一个0~n的有序数值 ,任取子串(保证数有序 也就是升序即可)再找出所有不在子串里面的最小非负整数,求和。
思路 : 1、 这是我一开始做时候的想法 用到了排列组合 先想 会有多少个子串 再计算每个子串中每个数出现的可能 用列子n=5 带一下 就可以找到规律  再根据 这些可能 列出 每种数字的可能 得到 式子1 再裂项相消 得到最终结果

若数据小一点 可以直接循环计算 ,但因为数据量 所以即使化到最简 ,依然需要一点点技巧,也就是快速幂。 简单解释一下: 1、对每步计算都 % 一个数 不在最后去% 2、不断的去减小指数 https://blog.csdn.net/qq_19782019/article/details/85621386 这个是目前看到讲的超细的~
2、 看的官方题解 理解了一半 
具体代码:
#include<iostream>
typedef long long ll;
using namespace std;
const int mod = 998244353;
ll n;
ll quick(ll x,ll y)
{ ll res=1;
while (y){
if (y&1)
res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
int main()
{
ll ans;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
ans=quick(2,n)-1;
printf("%lld\n",ans);
}
return 0;
}
C Constructive Problem
C 超级头大的一类 空间题? 题意:给你一个数 求一个数组 满足 每个下标id出现对应的数x次。 就是 id是x的下标,数组里面id这个数要出现x次  截图于百科官方题解
思路 思考方向 就是选几个大一点的数凑一下 然后 再总结一个规律
|