列表

详情


NC240498. 清楚姐姐带带我

描述

在牛客群里有一位群友小Y,她实力非常菜,于是每次牛客比赛前,她总是希望清楚姐姐可以带带她。

现在有n场比赛,第$i$场比赛有两个参数a_i,b_i

小 Y 的初始实力为0,她将依次参加第 1,2,3,...,n 场比赛。

在第场比赛时,小 Y 有两种选择。一种是小 Y 可以选择自己打,这样赛后她的实力会比原来增加 a_i;另外一种是小 Y 让清楚姐姐带,这样她的实力会是原来的 b_i 倍。

现在小 Y 想知道,经过$n$场比赛后,她的实力值能达到的最大值对 19980829 取模后的结果。

输入描述

第一行,一个正整数

后面n行,每行 2 个正整数

输出描述

一个正整数,表示小Y能达到的最大实力值对 19980829 取模后的值。

示例1

输入:

4
1 10
5 4
5 2
3 1

输出:

15

说明:

小 Y 可以选择:

第一场自己打,实力值  = 0 + 1 = 1

第二场自己打,实力值 = 1 + 5 = 6

第三场让清楚姐姐带,实力值  = 6*2 = 12

第四场自己打,实力值  = 12+3 = 15

示例2

输入:

4
114514 2000000
1477 3000000
2333 255
10086 3000000

输出:

9268298

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 318ms, 内存消耗: 424K, 提交时间: 2022-09-14 15:26:18

#include<iostream>
using namespace std;
#define int long long
const int mod=19980829;
int n,a,b;
signed main(){
    cin>>n;
    int res=0;
    for(int i=1;i<=n;i++){
        cin>>a>>b;
        if(res*b>res+b)res*=b;
        else res+=a;
        res%=mod;
    }
    cout<<res;
}

C++(clang++ 11.0.1) 解法, 执行用时: 147ms, 内存消耗: 444K, 提交时间: 2022-09-14 08:49:13

#include<iostream>
using namespace std;

const int MOD=19980829;
int n;
long long a,b,ans;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a>>b;
		if(ans*b>ans+b)ans*=b;else ans+=a;
		ans %= MOD;
	}
	cout<<ans;
	return 0;
}

Python3 解法, 执行用时: 1362ms, 内存消耗: 4600K, 提交时间: 2022-09-04 10:25:28

ans=0
f=0
for _ in range(int(input())):
    a,b=map(int,input().split())
    if f and b>1:
        ans=ans*b%19980829
    else:
        ans=max(ans+a,ans*b)
        if ans>1e9:
            f=1
print(ans%19980829)

上一题