经谷歌翻译------------------------------------
最近,爱丽丝收到了很多礼物。因此,她决定将它们包装在盒子中,然后发送给她的朋友。 有n种礼物。一种礼物是相同的(即无法区分两种相同的礼物)。不同种类的礼物是不同的(即,两种不同种类的礼物是可区分的)。爱丽丝所拥有的每种礼物的数量非常大,因此我们可以认为爱丽丝具有无限数量的每种礼物。 另外,还有毫米盒。它们都是针对不同的人的,因此它们是成对的(考虑到m朋友的名字写在盒子上)。例如,将第一种礼物放入第一个盒子而不是第二个盒子,不同于将第一种礼物放入第二个盒子而不是第一个盒子。 爱丽丝想用以下规则包装礼物: 她不会在同一个盒子里装多于一件的每种礼物,因此每个盒子应该包含不同种类的礼物(即每个盒子包含n种子集,允许有空盒子); 对于每种种类,至少应将一个礼物装在一个盒子里。 现在,爱丽丝想知道有几种包装礼物的方式。请帮助她并计算这个数字。由于答案可能很大,因此请10^9 + 7为模输出。 请参阅示例及其注释以进行澄清
输入
第一行包含两个整数nn和mm,以整数(1≤n,m≤10^9)隔开-礼物的种类和爱丽丝的盒子数。
输出
打印一个整数-用10^9 + 7模计算的用爱丽丝规则包装礼物的方式数量
样例1
Input
1 3
Output
7
样例2
Input
2 2
Output
9
备注
每个盒子都不一样
礼物一个个的发
发一种有2^m-1
发n种就有(2^m -1) ^n;
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <stdlib.h>
#include <math.h>
#include <string.h>
// *start on @date: 2020-02-14 17:27
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int maxn = -999999;
int minn = 999999;
const int mod = 1e9+7;
ll qpow ( ll base, ll n ) {
ll ans = 1;
while ( n ) {
if ( n&1 )
ans = ans*base%mod;
// & 1的结果就是取二进制的最末位。
//这可以用来判断一个整数的奇偶,
//二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。
base = base*base%mod;
n >>= 1; //比如原来n是8,他的二进制数为1000,进行>>1右移一位后就是100,
}
return ans;
}
int main()
{
ll n, m;
cin >> n>> m;
cout << qpow( qpow(2,m)-1, n );
return 0;
}
探讨了在特定条件下,计算不同种类礼物包装到多个盒子中的组合方式。通过数学算法和编程实现,解决了爱丽丝如何根据规则将礼物分配到不同盒子的问题。
859

被折叠的 条评论
为什么被折叠?



