2020牛客NOIP赛前集训营-普及组(第二场)C涨薪

涨薪

https://ac.nowcoder.com/acm/contest/7606/C

2020牛客NOIP赛前集训营-普及组(第二场)C涨薪

快排加快速幂,无视辞退者,比赛的时候没想到加快速幂,直接60分……没关系,想到加快速幂也写不出来
真没什么好说的,唯一需要注意的就是快速幂运算时模,防爆longlong

code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define mod 1000000007
using namespace std;
ll n,m,x,y,s=0,a[100001],xx=0,yy=0;
bool cmp(ll a,ll b)
{
    return a>b;
}
void ksm()
{
    ll xxx=3,yyy=2;
    while(m)
    {
        if(m&1)
        {
            xx=(xx*xxx)%mod;
            yy=(yy*yyy)%mod;
        }
        xxx=(xxx*xxx)%mod;
        yyy=(yyy*yyy)%mod;
        m/=2;
    }
    return;
}
int main()
{
    cin>>n>>m>>x>>y;
    for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
    sort(a+1,a+n+1,cmp);//从大到小排序
    if(m==1)//一年特判
    {
        for(int i=1;i<=x;i++)s=(s+a[i]*3)%mod;
        for(int i=x+1;i<=x+y;i++)s=(s+a[i]*2)%mod;
        for(int i=x+y+1;i<=n;i++)s=(s+a[i])%mod;
        cout<<s;
        return 0;
    }
    for(int j=1;j<=x;j++)xx=(xx+a[j])%mod;
    for(int j=x+1;j<=x+y;j++)yy=(yy+a[j])%mod;
    ksm();//快速幂
    cout<<(xx+yy)%mod;//一定要再模一次
    return 0;
}
全部评论

相关推荐

没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
北漂的牛马人:211佬,包进的,可能是系统问题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务