10.09 悲伤赛

时间:2019-10-10
本文章向大家介绍10.09 悲伤赛,主要包括10.09 悲伤赛使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天比赛换了一个位置,emmm?排除风水影响……

预计得分 100+10+??

实际得分  60+0+30

先说第一题,比较水

通过组合数可以退出一个公式

化简之后得  2^n-1*(n-2)+1

其实我是观察找规律……

我们把1到n的区间中任意砍一刀,固定前区的最后一个数

例如:1 2 3 4 5

在三和四中间砍一刀  固定三  前区的组合方式就是C2 1,后区是C2 1,相乘即可

但是60分的原因是乘积爆long long了……

所以还要用快速乘(注意要在快速幂里用)

代码如下:

#include<bits/stdc++.h>
#include<cctype> 
using namespace std; 
char buf[1<<20],*p1,*p2; 
#define GC (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++) 
template<class T> inline void read(T &n){ 
    char ch=GC;T w=1,x=0; 
    while(!isdigit(ch)){if(ch=='-') w=-1;ch=GC;} 
    while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=GC;} 
    n=x*w; 
}
long long mod;
long long anss;

inline long long cheng(long long a,long long b){
    return (a*b-(long long)((long double)a/mod*b)*mod+mod)%mod;
}

long long ksm(long long a,long long b)
{
long long ans=1;
while(b)
{
if(b&1)ans=cheng(ans,a)%mod;
a=cheng(a,a)%mod;
b=b/2;
}
return ans;
}
 
int main()
{
    
long long n;
cin>>n>>mod;

long long f=ksm(2,n-1)%mod;

anss=cheng(f,(n-2))%mod;

anss+=1;

anss%=mod;

cout<<anss;

}

原文地址:https://www.cnblogs.com/cocacolalala/p/11647544.html