一、题目描述:
你有一个骰子,数字
初始时有一个数
当扔到数字
给你一个数字
二、解题思路:
当扔到
求出
一个
枚举
最后求和。需要用到逆元,阶乘。时间复杂度
三、完整代码:
1 #include<iostream> 2 #define ll long long 3 #define mod 998244353 4 using namespace std; 5 ll n,t2=1,rans,jc[100]; 6 ll ans2,ans3,ans5; 7 ll qsm(ll base,ll p) 8 { 9 ll ans=1; 10 while(p) 11 { 12 if(p&1) ans*=base,ans%=mod; 13 base*=base,base%=mod,p>>=1; 14 } 15 return ans; 16 } 17 int main() 18 { 19 cin>>n;jc[0]=1; 20 while(n&&n%2==0) 21 ans2++,n/=2; 22 while(n&&n%3==0) 23 ans3++,n/=3; 24 while(n&&n%5==0) 25 ans5++,n/=5; 26 if(n!=1) 27 { 28 cout<<0<<'\n'; 29 return 0; 30 } 31 for(ll i=1;i<=70;i++) 32 jc[i]=jc[i-1]*i%mod; 33 for(ll i=0;i<=min(ans2,ans3);i++) 34 for(int j=0;j*2<=ans2-i;j++) 35 { 36 ll t=ans2+ans3+ans5-i-j; 37 t2=jc[t]*qsm(qsm(5,t),mod-2)%mod; 38 t2*=qsm(jc[i],mod-2),t2%=mod; 39 t2*=qsm(jc[j],mod-2),t2%=mod; 40 t2*=qsm(jc[ans5],mod-2),t2%=mod; 41 t2*=qsm(jc[ans3-i],mod-2),t2%=mod; 42 t2*=qsm(jc[ans2-i-j*2],mod-2),t2%=mod; 43 rans+=t2,rans%=mod; 44 } 45 cout<<rans<<'\n'; 46 return 0; 47 }
四、写题心得:
很好的一道题,对我来说有难度。这次是完全自己想出来的,很高兴,可惜是在比赛后十分钟写出来的
标签:
Atcoder
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探