2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)
咕咕咕了太久? 多校博客直接從第三場跳到了第九場orz 見諒見諒(會補的!)
明明最后看下來是dp場 但是硬生生被我們做成了組合數專場…… 聽說jls把我們用組合數做的題都用dp來了遍 這里只放了用組合數的題目 dp的還沒有補(這又是一個大坑orz)
1001?Rikka with Nash Equilibrium? ? ? (hdoj 6415)
鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6415
題意:給一個n*m的矩陣 其中放著從1到n*m的嚴格不想等的數字 只能有一個位置的數字在這一行這一列都是最大 求這樣的排放方案數 并且將方案數對k取模 其中k并不是質數
想到了用概率的思想去做 一個數放在每個位置上的概率都是相等的 先放最大的那個數 若放在列上 則有n!種放置方法 若放在行上 則有m!種放置方法 而一行一列則是有(n+m-1)個位置 所以放置位置的概率就是
n!*m!/(n+m-1)!,最后是n*m個數的全排列??
推出來的式子為:n!*m!/(n+m-1)!*(n*m)!
代碼如下:
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring>using namespace std; typedef long long ll; ll t,n,m,k,ans;ll comb(ll x){ll sum=1;for(int i=1;i<=x;i++){sum=(sum*i)%k;}return sum; }int main(){scanf("%lld",&t);while(t--){scanf("%lld%lld%lld",&n,&m,&k);ll ans=comb(n)*comb(m)%k;ll t1=n+m,t2=n*m;ll res=1;for(int i=t1;i<=t2;i++){res=(res*i)%k;}ans=(ans*res)%k;printf("%lld\n",ans);}return 0; } View Code?
1004?Rikka with Stone-Paper-Scissors? ? ?(hdoj 6418)
鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6418
簽到題
題意:兩方博弈 自己一方剪刀 石頭 布的數量分別為x y z 對方為a b c 算出自己獲勝的概率? 需要約分
需要注意到的就是負數情況
代碼如下 一些必要的注釋已經寫在里面了
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using namespace std; typedef long long ll; int t; ll a,b,c,x,y,z,n,t1,t2,t3,p,d;ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}int main(){scanf("%d",&t);while(t--){cin>>a>>b>>c>>x>>y>>z;n=a+b+c;t1=x*(c-b); //x做出的貢獻t2=y*(a-c); //y做出的貢獻t3=z*(b-a); //z做出的貢獻p=t1+t2+t3; d=gcd(p,n); //約分 if(d<0) d=-d;p/=d;n/=d;if(n==1) cout<<p<<endl;else cout<<p<<"/"<<n<<endl;}return 0; } View Code?
轉載于:https://www.cnblogs.com/whdsunny/p/9513891.html
總結
以上是生活随笔為你收集整理的2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb笔记(三)
- 下一篇: 如何修改Vue打包后文件的接口地址配置