1. 程式人生 > >2018年12月29日普級組

2018年12月29日普級組

解題報告

前言

確定這是普及的題目嗎

三個袋子

題目

NN個不同的球放到3個相同的袋子裡,求放球的方案總數MM

分析

如果每個袋子不一樣,球也不一樣,那麼總方案數為3n3^n 問題是袋子一樣所以要除以3!,但是那樣就漏算了空2個袋子的情況,所以應為(3n+3)÷6mod  p(3^n+3)\div 6 \mod p,化簡得到(3n1+1)÷2mod  p(3^{n-1}+1)\div 2\mod p

modp 因為(a÷b)mod  c=(amod  bc)÷b(a \div b) \mod c =(a \mod bc)\div b,所以也就是((3n1+1)mod  2p)÷2((3^{n-1}+1)\mod 2p)\div 2

程式碼

#include <cstdio>
#define rr register
using namespace
std; int n,mod; inline signed ksm(long long x,int y){ rr long long ans=1; while (y){ if (y&1) ans=ans*x%mod; x=x*x%mod; y>>=1; } return ans; } signed main(){ scanf("%d%d",&n,&mod); mod<<=1; printf("%d",ksm(3,n-1)+1>>1); return 0; }