c_cpp ACM-ICPC 2018焦作赛区网络预赛

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp ACM-ICPC 2018焦作赛区网络预赛相关的知识,希望对你有一定的参考价值。

/**
 * 题目: T个样例,N个孩子N个糖果,孩子按1~N排队,每次按顺序选一个孩子给他至少1个糖果,
 * 直至糖果用完,问有多少种分配方案。
 * 这题直接用插板法就可以了,从后往前推,所有孩子都有1个糖果,相当于N个糖果中
 * 插N-1块板,倒数第一个孩子没糖果,则相当于在N个糖果中插N-2块板,这样递推回来
 * 最后发现所有方案数加起来就是C(n-1,0)+...+C(n-1,n-1) = 2^(n-1)
 * 另外这题N有10^1e5次方大,所以得用大整数取模+欧拉降幂+快速幂
 * 
 * input:
 * 1
 * 4
 * 
 * output:
 * 8
 * /

#include <iostream>
#include <string.h>
#include <cstdio>
#include <queue>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>

#define SIGMA_SIZE 26
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) (x&-x)
#define fode(i, a, b) for(int i=a; i>=b; i--)
#define foe(i, a, b) for(int i=a; i<=b; i++)
#define fod(i, a, b) for(int i=a; i>b; i--)
#define fo(i, a, b) for(int i=a; i<b; i++)
//#pragma warning ( disable : 4996 )

using namespace std;
typedef long long LL;
inline LL LMax(LL a, LL b) { return a>b ? a : b; }
inline LL LMin(LL a, LL b) { return a>b ? b : a; }
inline LL lgcd(LL a, LL b) { return b == 0 ? a : lgcd(b, a%b); }
inline LL llcm(LL a, LL b) { return a / lgcd(a, b)*b; }  //a*b = gcd*lcm
inline int Max(int a, int b) { return a>b ? a : b; }
inline int Min(int a, int b) { return a>b ? b : a; }
inline int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b); }
inline int lcm(int a, int b) { return a / gcd(a, b)*b; }  //a*b = gcd*lcm
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = 1e9+7;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const int maxk = 1e6+5;
const int maxn = 1e6+10;

int n;
char str[maxn];

LL getM(LL a, LL b, LL m)
{
	LL _sum = 1, base = a;
	
	while (b)
	{
		if (b&1)
			_sum = (_sum*base)%m;
		base = (base*base)%mod;
		b >>= 1;
	}
	return _sum;
}

int divMod(LL m)
{
	LL s = 0;
	for(int i = 0; str[i]!='\0'; i++)
		s = (s * 10 + str[i]-'0') % m;
	
	return s;
}

LL getAns(int x)
{
    LL up = divMod(mod-1) + mod-2;
    return getM(2LL, up, mod);
}

int main()
{

    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
    #endif  

    int T; cin >> T;
    while(T--)
    {  
        memset(str, 0, sizeof(str));
        scanf("%s", str);

        cout << getAns(n) << endl;
    }

    return 0;

}

以上是关于c_cpp ACM-ICPC 2018焦作赛区网络预赛的主要内容,如果未能解决你的问题,请参考以下文章

ACM-ICPC 2018 焦作赛区网络预赛 B题 Mathematical Curse

ACM-ICPC 2018 焦作赛区网络预赛 Solution

ACM-ICPC 2018 焦作赛区网络预赛 HL

ACM-ICPC 2018 焦作赛区网络预赛 G题 Give Candies

ACM-ICPC 2018 焦作赛区网络预赛 L 题 Poor God Water

Poor God Water(ACM-ICPC 2018 焦作赛区网络预赛 矩阵快速幂)