当您看到提交代码的区域是一块空白的时候,说明当前这道题目需要您自行编写「标准输入」和「标准输出」逻辑,以及自行 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); } }
Python3
from functools import reduce 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]) 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 fs = require('fs'); const input = fs.readFileSync(0, 'utf8').split(/\s+/).map(Number); let idx = 0; const n = input[idx++]; const m = input[idx++]; const a = [0]; for (let i = 0; i < n; i++) { a.push(input[idx++]); } const pref = Array.from({ length: n + 1 }, () => 0); const mx = Array.from({ length: n + 1 }, () => 0); for (let i = 1; i <= n; i++) { pref[i] = pref[i - 1] + a[i]; mx[i] = Math.max(mx[i - 1], pref[i]); } let ans = 1 << 30; for (let i = m; i <= n; i++) { ans = Math.min(ans, pref[i] - mx[i - m]); } console.log(ans);