当您看到提交代码的区域是一块空白的时候,说明当前这道题目需要您自行编写「标准输入」和「标准输出」逻辑,以及自行 import/include 需要的 library。
首先,您需要认真阅读题目中给出的「格式」要求以及「示例」,了解清楚「输入」「输出」的格式,然后按照输入格式从「标准输入」读取数据,再编写相应的代码计算结果,最后按照输出格式将结果输出到「标准输出」。
以下是题目《简单游戏》的样例代码:
给出一个长度为 n 的数组 a,你需要在这个数组中找到一个长度至少为 m 的区间,使得这个区间内的数字的和尽可能小。
格式:
输入: - 第一行包含一个正整数 n,m,表示数组的大小和所选区间的最小长度。 - 第二行包含 n 个整数,中间用空格隔开。 输出: - 输出仅包含一个正整数,表示所选区间的和。
示例:
输入: 5 3 1 2 3 4 5 输出:6
Java
注意:类名必须是 Solution
,不能带有包(package)的信息,可以有 import
。
可以使用 Scanner
读取输入。当数据量多的时候,可以使用 BufferedReader
。
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取 n m
int n = scanner.nextInt(), m = scanner.nextInt();
int[] nums = new int[n + 1];
int[] pref = new int[n + 1];
int[] mx = new int[n + 1];
// 读入数组
for (int i = 1; i <= n; i++) {
nums[i] = scanner.nextInt();
pref[i] = pref[i - 1] + nums[i];
mx[i] = Math.max(pref[i], mx[i - 1]);
}
int ans = Integer.MAX_VALUE;
for (int i = m; i <= n; i++) {
ans = Math.min(ans, pref[i] - mx[i - m]);
}
// 将结果输出到标准输出
System.out.println(ans);
}
}
Python
n, m = map(int, input().split())
a = [0] + list(map(int, input().split()))
pref = [0] * (n + 1)
mx = [0] * (n + 1)
for i in range(1, n + 1):
pref[i] = pref[i - 1] + a[i]
mx[i] = max(pref[i], mx[i - 1])
from functools import reduce
print(reduce(min, [pref[i] - mx[i - m] for i in range(m, n + 1)], 1 << 30))
C++
注意:若使用 cin,cout 进行输入输出,在数据量较大时,可以使用 ios::sync_with_stdio(false);
和 cin.tie(0);
语句对输入输出速度进行优化,但请注意,在使用上述优化的情况下,请勿混用 cin 与 scanf、cout 与 printf,否则代码可能发生无法预料的行为。
#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<int> a(n + 1);
vector<int> pref(n + 1);
vector<int> mx(n + 1);
int ans = (1 << 30);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
pref[i] = pref[i - 1] + a[i];
mx[i] = max(mx[i - 1], pref[i]);
}
for (int i = m; i <= n; ++i) {
ans = min(ans, pref[i] - mx[i - m]);
}
cout << ans << endl;
return 0;
}
GO
package main
import (
"fmt"
)
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
var n, m int
fmt.Scanln(&n, &m)
a := make([]int, n+1)
pref := make([]int, n+1)
mx := make([]int, n+1)
ans := 1 << 30
for i := 1; i <= n; i++ {
fmt.Scan(&a[i])
pref[i] = pref[i-1] + a[i]
mx[i] = max(mx[i-1], mx[i])
}
for i := m; i <= n; i++ {
ans = min(ans, pref[i]-mx[i-m])
}
fmt.Println(ans)
}
JavaScript
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 读取n和m
rl.question('', (nums) => {
const [n, m] = nums.split(' ').map(Number);
const pref = Array.from({length:n+1},()=>0)
const mx = Array.from({length:n+1},()=>0)
// 读取数组
rl.question('', (numbers) => {
const a = numbers.split(' ').map(Number);
a.unshift(0)
for(let i=1;i<=n;i++){
pref[i]=pref[i-1]+a[i]
mx[i]=Math.max(mx[i],mx[i-1])
}
let ans = (1<<30)
for (let i = m; i <= n; i++) {
ans = Math.min(ans, pref[i] - mx[i - m]);
}
console.log(ans)
// 关闭标准输入
rl.close()
});
});
// 当标准输入关闭时触发
rl.on('close', () => {
process.exit(0);
});