ACM----思維題

Alice and the List of Presents

題目
思路:
把n件物品拆成一件一件來考慮;
對於每一件物品,要保證至少有一個是放在m個包中的某一個包裏的,那麼總的合法方案就是 2^m-1(對於每一個包放或者不放,最後減去全不放的情況);

總的答案 就是第一種的物品的方案 * 第二種物品的方案 * …… =(2^m-1) ^ n ;(要把每一種物品放置 組合成 n 種物品放置);

同時這種考慮方法也規避掉了一個包 放置多個同一種物品的情況;

#include<bits/stdc++.h>
#define ll long long
using namespace std;
typedef unsigned long long ULL;
const int N=100010;

ll mod=1e9+7;
long long qPow(long long int a,long long int n){
	long long int ans=1;
	while(n>0){
		if(n&1)//取二進制最末端
			ans=(ans*a)%mod;
		a=(a*a)%mod;
		n>>=1;//右移一位
		//將n寫成二進制的形式,遇到1就與結果相乘
	}
	return ans;
}
int main() {
    int m,n;
    cin>>m>>n;
    ll temp=qPow(2,n)-1;
    l ans=qPow(temp,m);
    cout<<ans<<endl;
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章