列表

详情


NC246909. 幼稚园的树

描述

牛牛在幼稚园做义工,幼稚园中共有 n 颗树,第 1 天中午时它们的高度分别为: (单位:厘米)。

每一天的晚上每棵树的高度都会增加 a 厘米,而牛牛的任务则是在第二天的清晨检查每一颗树的高度,若某颗树的高度超过了 k 厘米牛牛就会将它的高度修剪为 b 厘米。

牛牛想请你帮它计算一下第 m中午每一颗树的高度。

输入描述

本题采用多组案例输入,第一行一个整数 T 代表案例组数。
每组案例中,第一行输入一个数 n
接下来一行输入 n 个由空格分隔的整数代表:
接下来一行输入三个由空格分隔的整数代表:
接下来一行输入一个整数代表:m
保证:



单个测试点中所有案例 n 的和与 m 的和都不超过 3000

输出描述

对于每组案例,输出一行 n 个空格分隔的整数代表第 m 天中午每棵树的高度(单位:厘米),案例与案例之间用换行分隔。

示例1

输入:

2
6
1 10 100 200 120 230
5 230 200
7
5
1 2 3 4 5
10 5 2
1

输出:

31 40 130 230 150 225
1 2 3 4 5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Go 解法, 执行用时: 39ms, 内存消耗: 1024K, 提交时间: 2023-08-11 09:42:29

package main
import (
    "fmt"
)

func main() {
    T, n, a, k, b,m := 0,0,0,0,0,0
    fmt.Scanf("%d",&T)
    
    for T > 0 {
        T--
        fmt.Scanf("%d",&n)
        ans := make([]int,n)
        for i := 0; i < n; i++ {
            fmt.Scanf("%d",&ans[i])
        }
        fmt.Scanf("%d %d %d",&a,&k,&b)
        fmt.Scanf("%d",&m)
        
        for i := 0; i < n; i++ {
            for j := 0; j < m-1; j++ {
                ans[i] += a
                if ans[i] > k  {
                    ans[i] = b
                }
            }
        }
        for i := 0; i < len(ans)-1; i++ {
            fmt.Printf("%d", ans[i])
            fmt.Printf(" ")
        }
        fmt.Printf("%d", ans[len(ans)-1])
        fmt.Println()
    }
    return 
}

Go 解法, 执行用时: 42ms, 内存消耗: 1008K, 提交时间: 2023-08-11 09:42:06

package main

import (
	"fmt"
)

const M int = 1e5

var h [M + 5]int

func work() {
	var n int
	fmt.Scan(&n)
	for i := 1; i <= n; i++ {
		fmt.Scan(&h[i])
	}
	var a, b, k, m int
	fmt.Scan(&a, &k, &b, &m)
	for i := 1; i <= m; i++ {
		for j := 1; j <= n; j++ {
			if h[j] > k {
				h[j] = b
			}
			if i < m {
				h[j] += a
			}
		}
	}
	for i := 1; i <= n; i++ {
		fmt.Print(h[i])
		if i < n {
			fmt.Printf(" ")
		} else {
			fmt.Printf("\n")
		}
	}
}

func main() {
	var T int
	fmt.Scan(&T);
	for ca := 1; ca <= T; ca++ {
		work()
	}
}

Python3 解法, 执行用时: 555ms, 内存消耗: 4816K, 提交时间: 2023-08-11 09:40:54

t = int(input())
for i in range(t):
    n = int(input())
    h = [int(i) for i in input().split()]
    a, k, b = map(int, input().split())
    m = int(input())
    if m == 1:
        for i in h:
            print(i, end=" ")
        print()
    else:
        for i in range(m-1):
            h1 = [i+a for i in h]
            h2 = [b if i>k else i for i in h1 ]
            h = [i for i in h2]
        for i in h2:
            print(i, end=" ")
        print()

Java 解法, 执行用时: 407ms, 内存消耗: 22036K, 提交时间: 2023-08-11 09:39:05

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    	Scanner in = new Scanner(System.in);
    	int t = in.nextInt();
    	for(int i=0;i<t;i++) {
    		int n = in.nextInt();
    		int[] h = new int[n];
    		for(int j=0;j<n;j++) {
    			h[j] = in.nextInt();
    		}
    		int a = in.nextInt();
    		int k = in.nextInt();
    		int b = in.nextInt();
    		int T = in.nextInt();
    		for(int m = 1;m<T;m++) {
    			for(int x=0;x<n;x++) {
                    h[x]+=a;
    				if(h[x]>k) {
    					h[x] = b;
    				}
    			}
    		}
    		for(int y=0;y<n;y++) {
    			System.out.print(h[y]+" ");
    		}
    		System.out.println();
    	}
    }
}

上一题