题目的规定有一下三点 1.每成功上报一条日志,奖励1分. 2.每条日志每延迟1s上报扣1分 3.到100条日志必须上报
for循环枚举i每一时刻,pre表示前i-1时刻日志总和,在利用一个循环求出目前时刻所得总分.当pre+now大于等于100时应立刻break.答案即是每个时刻得分的最大值
#include <bits/stdc++.h>
using namespace std;
int main() {
string line;
getline(cin,line);
stringstream ss(line);
string x;
vector<int> records;
while(getline(ss,x,',')){
records.push_back(stoi(x));
}
int res = 0;
int acc = 0;
for (int i = 0; i < n; i++) {
acc += records[i];
int score = 0;
if (acc >= 100) {
for (int j = 0; j < i; j++) {
score += records[j] * (j - i);
}
score += 100;
res = max(score, res);
break;
}
for (int j = 0; j < i; j++) {
score += records[j] * (j - i);
}
score += acc;
res = max(score, res);
}
cout << res << endl;
return 0;
}
records = list(map(int, input().split()))
n = len(records)
res = 0
acc = 0
for i in range(n):
acc += records[i]
score = 0
if acc >= 100:
for j in range(i):
score += records[j] * (j - i)
score += 100
res = max(score, res)
break
for j in range(i):
score += records[j] * (j - i)
score += acc
res = max(score, res)
print(res)
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] records = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int n = records.length;
int res = 0;
int acc = 0;
for (int i = 0; i < n; i++) {
acc += records[i];
int score = 0;
if (acc >= 100) {
for (int j = 0; j < i; j++) {
score += records[j] * (j - i);
}
score += 100;
res = Math.max(score, res);
break;
}
for (int j = 0; j < i; j++) {
score += records[j] * (j - i);
}
score += acc;
res = Math.max(score, res);
}
System.out.println(res);
sc.close();
}
}
日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分批上报。
为此,项目组设计了如下的上报策略:
给出日志序列,根据该规则,计算首次上报能获得的最多积分数。
按时序产生的日志条数 T1,T2,…,Tn,其中
首次上报最多能获得的积分数
输入
1 98 1
输出
98
说明
T1 时刻上报得 1 分
T2 时刻上报得98分,最大
T3 时刻上报得 0 分
输入
50 60 1
输出
50
说明
如果第1个时刻上报,获得积分50。
如果第2个时刻上报,最多上报100条,前50条延迟上报1s,每条扣除1分,共获得积分为 100−50=50
输入
3 7 40 10 60
输出
37
说明
T1时刻上报得3分
T2时刻上报得7分
T3时刻上报得37分,最大
T4时刻上报得−3分
T5时刻上报,因为已经超了100条限制,所以只能上报100条,得−23分