Codeforces Round #593 (Div. 2) B. Alice and the List of Presents

Link
题意:
\(n\) 种礼物分配给 \(m\) 个盒子
每种礼物有无限个,每个盒子至多拥有同种礼物一个并保证每种礼物至少被分配一次
思路:
求组合数
\(present_1\) 总共 \(2^{m-1}\) 种分法
根据乘法原理 \(n\) 个 \(present\) 共有 \({2^{m-1}}^n\) 种分法
代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll mod=1e9+7;

int n,m;

ll ksm(ll n,ll x)
{
    ll res=1;
    while(x)
    {
        if(x&1) res=res*n%mod;
        n=n*n%mod;
        x>>=1;
    }
    return res;
}
int main()
{
    cin>>n>>m;
    cout<<ksm((ksm(2,m)+mod-1)%mod,n)<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/c4Lnn/p/12398362.html

时间: 2024-10-16 15:08:17

Codeforces Round #593 (Div. 2) B. Alice and the List of Presents的相关文章

Codeforces Round #593 (Div. 2)

Codeforces Round #593 (Div. 2) A. Stones 思路:水题 先取第一堆中的每一个和先取第二堆中的每一个进行比较就行了 AC代码 #include <algorithm> #include <iomanip> #include <iostream> #include <map> #include <math.h> #include <queue> #include <set> #includ

Codeforces Round #201 (Div. 1) / 346A Alice and Bob

#include <cstdio> #include <algorithm> using namespace std; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int n[100+10]; int main() { int t,maxn = 0; scanf("%d",&t); for(int i=0; i<t; i++) { scanf("%d",&n[i]);

Codeforces Round #325 (Div. 2) E. Alice, Bob, Oranges and Apples

E. Alice, Bob, Oranges and Apples Alice and Bob decided to eat some fruit. In the kitchen they found a large bag of oranges and apples. Alice immediately took an orange for herself, Bob took an apple. To make the process of sharing the remaining frui

Codeforces Round #593 (Div. 2) C. Labs

题目:https://codeforces.com/contest/1236/problem/C 思路:将 n ^ 2 个 lab 平分为 n 个 group group A 和 B 组成的 有序对 ( u , v ) ,u∈A,v∈B 当 u > v 则此有序对有效,求最大值 易发现将1放在group 1,2放在group 2,3放在group 3,......,n放在group n,n+1放在group n,n+2放在group n-2,.......,2n放在group 1,2n+1放在g

Codeforces Round #Pi (Div. 2) (STL专场)

Codeforces Round #Pi (Div. 2) A - Lineland Mail 水题,拼手速. /* * @author Novicer * language : C++/C */ #include<iostream> #include<sstream> #include<fstream> #include<vector> #include<list> #include<deque> #include<queue

Codeforces Round #536 (Div. 2)

目录 Codeforces Round #536 (Div. 2) A 题目大意 题解 卡点 C++ Code: B 题目大意 题解 卡点 C++ Code: C 题目大意 题解 卡点 C++ Code: D 题目大意 题解 卡点 C++ Code: E 题目大意 题解 卡点 C++ Code: F 题目大意 题解 卡点 C++ Code: Codeforces Round #536 (Div. 2) A 题目大意 给你一个\(n\times n(n\leqslant500)\)的矩阵,只包含.

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i

Codeforces Round #424 (Div. 2) D. Office Keys(dp)

题目链接:Codeforces Round #424 (Div. 2) D. Office Keys 题意: 在一条轴上有n个人,和m个钥匙,门在s位置. 现在每个人走单位距离需要单位时间. 每个钥匙只能被一个人拿. 求全部的人拿到钥匙并且走到门的最短时间. 题解: 显然没有交叉的情况,因为如果交叉的话可能不是最优解. 然后考虑dp[i][j]表示第i个人拿了第j把钥匙,然后 dp[i][j]=max(val(i,j),min(dp[i-1][i-1~j]))   val(i,j)表示第i个人拿

Codeforces Round #424 (Div. 2) C. Jury Marks(乱搞)

题目链接:Codeforces Round #424 (Div. 2) C. Jury Marks 题意: 给你一个有n个数序列,现在让你确定一个x,使得x通过挨着加这个序列的每一个数能出现所有给出的k个数. 问合法的x有多少个.题目保证这k个数完全不同. 题解: 显然,要将这n个数求一下前缀和,并且排一下序,这样,能出现的数就可以表示为x+a,x+b,x+c了. 这里 x+a,x+b,x+c是递增的.这里我把这个序列叫做A序列 然后对于给出的k个数,我们也排一下序,这里我把它叫做B序列,如果我