【牛客_2020.10.20】漲薪
漲薪
解題思路
這道題…不就是最最最基本的快速冪嗎 (雖然我是做了這道題才學的) ,對於加薪覆蓋不到的人,乘了2或3後也沒有乘前面的數有用,所以我們只能殘忍的拋棄他們,最後累加即可。
code
#include<iostream>
#include<algorithm>
#include<cstdio>
#define ll long long
using namespace std;
const ll mod=1000000007;
ll n,m,x,y;
ll a[100010];
ll ans;
ll mm2,mm3;
bool cmp(ll a,ll b)
{
return a>b;
}
ll ksm(ll x,ll y)
{
ll s=1;
while(y)
{
if(y&1)
s=s*x%mod;
x=x*x%mod;
y>>=1;
}
return s;
}
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==0)
{
for(int i=1;i<=n;i++)
ans=(ans+a[i])%mod;
cout<<ans<<endl;
return 0;
}
if(m==1)
{
for(int i=1;i<=x;i++)
ans=(ans+a[i]*3)%mod;
for(int i=x+1;i<=x+y;i++)
ans=(ans+a[i]*2)%mod;
for(int i=x+y+1;i<=n;i++)
ans=(ans+a[i])%mod;
cout<<ans<<endl;
return 0;
}
mm2=ksm(2,m);
mm3=ksm(3,m);
for(int i=1;i<=x;i++)
ans=(ans+mm3*a[i]%mod)%mod;
for(int i=x+1;i<=x+y;i++)
ans=(ans+mm2*a[i]%mod)%mod;
cout<<ans<<endl;
}
相關文章
- 漲薪【貪心】【快速冪】
- 牛客
- 2020.10.20日記
- 【牛客訓練記錄】牛客周賽 Round 69
- 【牛客訓練記錄】牛客周賽 Round 70
- 【牛客】時間
- 牛客周賽48
- 牛客錯題集
- 牛客練習賽
- 開發者漲薪指南:提升軟、硬實力
- 牛客小白月賽105
- 牛客周賽 Round 63
- 2024 牛客多校 6
- 2024 牛客多校 7
- 2024 牛客多校 8
- 牛客周賽 Round 57
- 牛客周賽 Round 56
- 2024 牛客多校 2
- 2024 牛客多校 1
- 2023 牛客多校 5
- 2024牛客多校6
- 2024牛客多校1
- 牛客小白月賽97
- 牛客小白月賽88
- 牛客周賽 Round 40
- 牛客小白月賽89
- 牛客周賽 Round 47
- 牛客周賽 Round 1
- 牛客周賽 Round 3
- 牛客周賽 Round 7
- 牛客小白月賽94
- 牛客周賽 Round 8
- 牛客周賽Ronud 46
- 牛客周賽 Round 38
- 牛客挑戰賽58
- 牛客練習賽60
- Mysql 練習(牛客網)MySql
- 牛客錯題集(Java)Java