【ACM编程题】


标题:数组连续和 | 时间限制:1秒 | 内存限制:65536K | 语言限制: 不限


【编程题目 |100分】数组连续和【2021 H1,H2, 2022 OD考试题】


时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld


本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,

编码后请点击”保存并调试“按钮进行代码提交。


题目描述

【数组连续和】

给定一个含有N个正整数的数组, 求出有多少个连续区间(包括单个正整数), 它们的和大于等于x。

输入描述

第一行两个整数N x(0 < N <= 100000, 0 <= x <= 10000000)

第二行有N个正整数(每个正整数小于等于100)。

输出描述

输出一个整数,表示所求的个数。

注意:此题对效率有要求,暴力解法通过率不高,请考虑高效的实现方式。

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3 7

3 4 7

输出

4

样例解释

第一行的3表示第二行数组输入3个数,第一行的7是比较数,用于判断连续数组是否大于该数;

组合为 3 + 4; 3 + 4 + 7; 4 + 7; 7; 都大于等于指定的7;所以共四组。

示例2 输入输出示例仅供调试,后台判题数据一般不包含示例

10 10000

1 2 3 4 5 6 7 8 9 10

样例解释

所有元素的和小于10000,所以返回0。


注意:此题对效率有要求 ,请考虑高效的实现方式,暴力解法通过率不高。


代码实现


C++解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <bits/stdc++.h>
using namespace std;
int main()
{
int num_count = 0;
int target = 0;
cin >> num_count >> target;
vector<int> nums(num_count, 0);
for (int i = 0; i < num_count; i++)
cin >> nums[i];
vector<int> preSum = {0};
#include <bits/stdc++.h> using namespace std; int main() { int num_count = 0; int target = 0; cin >> num_count >> target; vector<int> nums(num_count, 0); for (int i = 0; i < num_count; i++) cin >> nums[i]; vector<int> preSum = {0};
#include <bits/stdc++.h>

using namespace std;

int main()
{
    int num_count = 0;
    int target = 0;
    cin >> num_count >> target;
    vector<int> nums(num_count, 0);

    for (int i = 0; i < num_count; i++)
        cin >> nums[i];

    vector<int> preSum = {0};

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

C++解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<bits/stdc++.h>
using namespace std;
#include<bits/stdc++.h> using namespace std;
#include<bits/stdc++.h>

using namespace std;

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看


JAVA


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import java.util.Scanner;
public class ArrayContinusSum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
import java.util.Scanner; public class ArrayContinusSum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int x = sc.nextInt();
import java.util.Scanner;

public class ArrayContinusSum {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int x = sc.nextInt();

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JavaScript


剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Golang


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
var N, x int
fmt.Scanf("%d %d", &N, &x)
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { var N, x int fmt.Scanf("%d %d", &N, &x)
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    var N, x int
    fmt.Scanf("%d %d", &N, &x)

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看