首页 > 试题广场 >

数组计数维护

[编程题]数组计数维护
  • 热度指数:12464 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定正整数 n 和阈值 k 以及长度为 n 的整数序列 \{a_1,a_2,\dots,a_n\}
\hspace{15pt}你需要动态地维护两个正整数变量 Scnt,初始时,S=cnt=0
\hspace{15pt}按照从 1n 的顺序,对每个下标 i 执行:
\hspace{23pt}\bullet\,a_i \ge k,则 S \leftarrow S + a_i
\hspace{23pt}\bullet\,a_i = 0S \ge 1,则 S \leftarrow S - 1cnt \leftarrow cnt + 1
\hspace{23pt}\bullet\,否则,不进行任何操作。
\hspace{15pt}输出最终 cnt 的值。

输入描述:
\hspace{15pt}第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right),表示测试用例组数。
\hspace{15pt}每组测试用例格式如下:
{<br />\hspace{20pt}}_\texttt{1.}\,第一行输入两个整数 n,k\ \left(1\leqq n\leqq 50;\ 1\leqq k\leqq 100\right)
{<br />\hspace{20pt}}_\texttt{2.}\,第二行输入 n 个整数 a_1,a_2,\dots,a_n\ \left(0\leqq a_i\leqq 100\right).


输出描述:
\hspace{15pt}对于每组测试用例,输出一行一个整数,表示 cnt 的值。
示例1

输入

3
3 2
2 0 1
4 1
0 0 0 0
5 3
3 0 0 4 0

输出

1
0
3

说明

\hspace{15pt}对于第一组数据:
\hspace{23pt}\bullet\,n=3,k=2,a=[2,0,1],第 12 \ge 2S=2;第 2 项为 0S\ge1,赠出 1 枚,cnt=1;第 3 项无操作;因此 cnt=1
\hspace{15pt}对于第三组数据:
\hspace{23pt}\bullet\,n=5,k=3,a=[3,0,0,4,0],第 13\ge3S=3;第 2,3 项各赠出 1 枚,cnt=2,S=1;第 44\ge3S=5;第 5 项再赠出 1 枚,cnt=3;因此 cnt=3
头像 小宛gogogo
发表于 2025-06-24 21:30:48
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = 展开全文
头像 Silencer76
发表于 2025-06-10 11:01:39
题目链接 数组计数维护 题目描述 给定一个长度为 n 的整数序列 a 和一个阈值 k。你需要动态维护两个变量 S 和 cnt,它们的初始值都为 0。 然后,按照从 1 到 n 的顺序遍历序列 a,对每个元素 a[i] 执行以下操作: 如果 a[i] >= k,则 S 的值增加 a[i]。 若 展开全文
头像 意若久时天然呆
发表于 2025-11-04 11:06:28
T=int(input()) for _ in range(T): n,k=map(int,input().split()) a=list(map(int,input().split())) s=cnt=0 for i in range(n): if 展开全文
头像 GPT1_0
发表于 2025-11-06 17:24:41
T = int(input()) n = [0]*T k = [0]*T def cnt_value(n,k,a): S = 0 cnt = 0 for i in range(n): if a[i]>=k: S = S+a[i] 展开全文
头像 牛客829244043号
发表于 2025-11-23 13:54:55
#include <stdio.h> int jacky_weihu(int arry[],int n,int k) { int s = 0,cnt = 0; for(int i = 0;i<n;i++) { if(arry[i]>= 展开全文
头像 爱吃的代码渣渣许愿简历通过
发表于 2025-12-18 23:14:34
t = int(input()) for i in range(t): n, k = map(int, input().split()) a = list(map(int, input().split())) s = cnt = 0 for j in range(n 展开全文
头像 Na_Na1
发表于 2025-09-03 16:54:25
#include <iostream> using namespace std; #define MAX_SIZE 1001 int main() { int T; cin>>T; while(T--){ int n,k; 展开全文
头像 wtleee
发表于 2025-10-07 17:58:36
#include <iostream> using namespace std; int main() { int T; cin>>T; int n,k; int S,cnt; int a[100]={0}; while(T--){ 展开全文
头像 何成HN
发表于 2025-08-29 15:36:06
t = int(input()) for _ in range(t): n, k = map(int,input().split()) a = list(map(int,input().split())) s = cnt = 0 for i in range(n): 展开全文
头像 强大的单身狗在吐槽
发表于 2025-10-24 03:39:54
package main import ( "bufio" "fmt" "os" "strconv" ) func main() { sc := bufio.NewScanner(os.Stdin) sc 展开全文