思路
题目的参数我分别用c,v,w,q,mod代替了。想法很简单,每个碗的放法都有cv种,碗有wq个,所以是两者的全排列。
这道题的主要的坑点是数据范围,如果你直接求(cv)^(wq)显然是不行的,因为c和v都有1e18大,所以要把式子分解。
,w*q没有爆ll,所以用中间的式就好啦~。
代码
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll c,v,w,q,mod,ans; ll fpow(ll p,ll t){ p%=mod; ll res=1; while(t){ if(t&1) res=res*p%mod; p=p*p%mod; t>>=1; } return res%mod; } int main(){ cin>>c>>v>>w>>q>>mod; w*=q; ans=fpow(c,w)*fpow(v,w)%mod; cout<<ans; return 0; }