problem

题目标题-最大值
现有一个长度为 nn 的序列 a_1,a_2,\cdots,a_na
1

,a
2

,⋯,a
n

。记 mx(a)mx(a) 为整个序列 aa 的最大值,即 mx(a)=\max(a_1,a_2,\cdots ,a_n)mx(a)=max(a
1

,a
2

,⋯,a
n

)。

对于一个序列 aa,记其权值 f(a)f(a) 为取得整个序列最大值的位置数量,即 \sum_{i=1}^n[a_i=mx(a)]∑
i=1
n

[a
i

=mx(a)]。其中 [A][A] 表示若 AA 为真,则其值为 11,否则为 00。

度度熊想知道满足以下条件的所有不同序列的权值之和:

1.序列的长度为 nn。
2.对于所有的 a_ia
i

(1\le i \le n1≤i≤n),满足 a_ia
i

为整数,且 1\le a_i\le m1≤a
i

≤m。

由于答案可能很大,你只需要输出答案对 998244353998244353 取模后的结果。

格式
输入格式:
共一行,两个整数 n,mn,m (1\le n\times m\le10^{12}1≤n×m≤10
12
),意义如上所述。

输出格式:
共一行一个整数,表示答案对 998244353998244353 取模后的结果。

样例 1
输入:
4 3
输出:
144
说明:

solution

  • <1e7时套公式。n∑i=1min−1n\sum_{i=1}^{m}i^{n-1}n∑i=1m​in−1
  • >1e7时套板子:https://www.cnblogs.com/Pro-king/p/10664390.html
  • 两题无罚时最后一小时前签上道就可以拿到衣服。
#include<bits/stdc++.h>
typedef long long LL;
#define rep(i,x,y) for(auto i=(x);i<=(y);++i)
#define F(i,a,b) for (LL i = a; i <= b; i ++)
#define G(i,a,b) for (LL i = a; i >= b; i --)
#define IOS ios::sync_with_stdio(0), cin.tie(0),cout.tie(0)
const LL Mo = 998244353, M = 1e6 + 10;
const LL mod=998244353;
using namespace std;LL pow2(LL a,LL b){LL r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod;b>>=1;}return r%mod;}
LL pows(LL a, LL x) { if(x==0)return 1; LL t = pows(a, x>>1); if(x%2==0)return t*t%mod; return t*t%mod*a%mod; }
LL pows(LL a, LL x, LL p) { if(x==0)return 1; LL t = pows(a, x>>1, p); if(x%2==0)return t*t%p; return t*t%p*a%p; }
LL exgcd(LL a, LL b, LL &x, LL &y){ if(!b){ x = 1, y = 0; return a; }else{LL r = exgcd(b, a%b, x, y); LL t = x; x = y; y = t-a/b*y; return r; }}
void exgcd(LL a, LL b, LL &d, LL &x,  LL & y, LL mod) { if (b==0) { d = a; x = 1; y = 0; } else { exgcd(b, a % b, d, y, x, mod); y -= x * (a / b); } }
LL inv(LL a, LL mod) { LL d=0, x=0, y=0; exgcd(a, mod,  d,  x, y, mod); return d == 1 ? (x + mod) % mod : -1; }LL l, r, k, m, y[M], z[M], jc[M], suf[M], pre[M];
bool bz[M];void Init() {y[1] = 1, m = k + 2;F(i, 2, m) {if (!bz[i])z[++ z[0]] = i, y[i] = pows(i, k);F(j, 1, z[0]) {if (z[j] * i > m) break;bz[z[j] * i] = 1;y[z[j] * i] = (1ll * y[z[j]] * y[i]) % Mo;if (i % z[j] == 0) break;}}F(i, 2, m)y[i] = (y[i - 1] + y[i]) % Mo;jc[0] = 1;F(i, 1, m)jc[i] = 1ll * jc[i - 1] * i % Mo;jc[m] = pows(jc[m], Mo - 2);G(i, m - 1, 1)jc[i] = 1ll * jc[i + 1] * (i + 1) % Mo;
}
LL Solve(LL n) {pre[0] = suf[m + 1] = 1;F(i, 1, m)pre[i] = 1ll * pre[i - 1] * (n - i) % Mo;G(i, m, 1)suf[i] = 1ll * suf[i + 1] * (n - i) % Mo;LL Ans = 0;F(i, 1, m)Ans = (Ans + 1ll * y[i] * pre[i - 1] % Mo * suf[i + 1] % Mo * (((k-i+2)&1) ? (-1) : 1) * jc[i - 1] % Mo * jc[k + 2 - i] % Mo) % Mo;return Ans;
}int main() {LL nn,mm,ans;  cin>>nn>>mm;if(mm<1e7){LL x=nn-1;rep(i,1,mm)ans=(ans+pow2(i,x))%mod;ans=ans*nn%mod;cout<<(ans+mod)%mod<<"\n";return 0;}r=mm,k=nn-1;Init();cout<<(Solve(r)*nn%Mo+Mo)%Mo;return 0;
}

2022百度之星程序设计大赛 - 复赛 1003 最大值相关推荐

  1. 2018“百度之星”程序设计大赛 - 复赛 1003 带劲的and和(位运算,很好的题)

    Problem Description 度度熊专门研究过"动态传递闭包问题",他有一万种让大家爆蛋的方法:但此刻,他只想出一道简简单单的题--至繁,归于至简. 度度熊有一张n个点m ...

  2. 2022百度之星程序设计大赛 - 复赛 1001 子序列

    problem 度度熊有一个大小为 nn 的整数数组 a_1,a_2,\cdots,a_na 1 ​ ,a 2 ​ ,⋯,a n ​ . 数组 a_1,a_2,\cdots,a_na 1 ​ ,a 2 ...

  3. 2017百度之星程序设计大赛 - 复赛 01,03,05

    Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. php解:2006 年百度之星程序设计大赛复赛题目 4 ----彩球游戏

    2006 年百度之星程序设计大赛复赛题目 4 彩球游戏 X 博士是一个研究儿童智力开发方法的科学家,他为幼儿教育领域做出了许多贡献.最近, X 博士正在研究一种适合儿童的游戏,用以辅助发展儿童的观察力 ...

  5. 2018“百度之星”程序设计大赛 - 复赛

    没有兄弟的舞会  Accepts: 928  Submissions: 2446  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6553 ...

  6. 2021 年百度之星·程序设计大赛 - 复赛 1002 Add or Multiply 1(第2类斯特林数)

    problem solution 想到了是n个小球放到m个盒子里以后,剩下的就是板子了 #include<bits/stdc++.h> using namespace std; typed ...

  7. 2021 年百度之星·程序设计大赛 - 复赛 1001 Palindrome(结论,奇偶性)

    problem solution 看到这个题第一个猜结论就是奇偶性,简单验证一下会发现k是奇数就Yes,偶数就No.其实也不难证明,偶数的时候,对于任意一段长为k的回文串,往右边移动一个的新的串,一定 ...

  8. 2020 年百度之星·程序设计大赛 - 复赛 1002 Binary Addition

    problem Binary Addition Accepts: 851 Submissions: 3320 Time Limit: 2000/1000 MS (Java/Others) Memory ...

  9. 2020 年百度之星·程序设计大赛 - 复赛 1001Battle for Wosneth

    problem Battle for Wosneth Accepts: 1174 Submissions: 5432 Time Limit: 2000/1000 MS (Java/Others) Me ...

  10. [2020 年百度之星·程序设计大赛 - 复赛] Binary Addition

    题解 +1会把前面所有1变成0,第一个0变成1,也就是批量消除前缀1,显然他只会用一次, 枚举时机就好了 如果a[i]是0,次数为a[0 ~ i-1]中0的个数+b[0 ~ i-1]中1的个数+1(+ ...

最新文章

  1. linux下kafka常用命令
  2. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务
  3. CompletableFuture介绍
  4. Linux 共享内存详解一
  5. 致 Python 初学者们!
  6. MySQL存储引擎及InnoDB并发控制介绍
  7. 简单实现 C# TabControl 不显示选项卡标题
  8. JDBC在Java Web中的应用——分页查询
  9. Java保存class文件,[转载]Class文件在JVM中如何存储
  10. 30个精品Python练手项目
  11. #考研笔记#计算机之word问题
  12. elpida颗粒_内存涨价三星背锅,晶圆颗粒远远不止这几家!
  13. java根据word模板导出word文件
  14. 2021-12-11 根据单词首字母查找单词
  15. REWORK读书笔记
  16. ROS文件系统和文件系统操作
  17. 正宇丨你的不自律,会毁了你一辈子
  18. Linux从头学09:x86 处理器如何进行-层层的内存保护?
  19. L0、L1、L2 范数
  20. 4K秒开,稀缺宝藏影视APP!

热门文章

  1. java socket调试工具_SocketToolV1.0-Java网络TCP调试助手
  2. 广东中考数学能用计算机吗,2013年广州中考数学能不能用计算器?
  3. 蓝屏dump分析教程,附分析工具WinDbg
  4. Visual Studio安装.nupkg文件
  5. xv6源码阅读——xv6的启动,进程初识
  6. 什么是国家机关、国有企业、事业单位?
  7. 归并排序(java实现)
  8. Filmage Screen for Mac 专业录屏软件用这个就足够
  9. html自动关机代码,电脑自动关机命令,shutdown命令
  10. 电脑微信多开方式(两种实现方案, 适合中文路径)(办公, 生活两不误 / 海王必备)