华为OD机试-最优资源分配-2022Q4 A卷-Py/Java/JS

某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1.2....M。该芯片支持3种不同的配置,分别为A、B、C。
配置A:占用容量为 1.25*1=1.25G
配置B:占用容量为1.25*2=2.5G
配置C:占用容量为 1.25*8=10G

        某块板卡上集成了N块上述芯片,对芯片编号为1,2,…,N,各个芯片之间彼此独立,不能跨芯片占用资源。
        给定板卡上芯片数量N、每块芯片容量M、用户按次序配置后,请输出芯片资源占用情况,保证消耗的芯片数量最少。

        资源分配规则:按照芯片编号从小到大分配所需资源,芯片上资源如果被占用标记为1,没有被占用标记为0.
        用户配置序列:用户配置是按次序依次配置到芯片中,如果用户配置序列种某个配置超过了芯片总容量,丢弃该配置,继续遍历用户后续配置。

输入描述
第一行一个整数M:每块芯片容量为 M*1.25G,取值范围为:1~256
第二行一个整数N:板卡包含的芯片数量,取值范围为1~32

第三行为一个字符串,表示用户配置序列:例如ACABA,长度不超过1000

输出描述
板卡上每块芯片的占用情况

备注
用户配置是按次序依次配置到芯片中,如果用户配置序列种某个配置超过了芯片总容量,丢弃该配置,继续遍历用户后续配置。
示例1: 输入输出示例仅供调试,后台判题数据一般不包含示例

输入
8

ACABA 
输出

11111000

11111111

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

输入
8

ACBCB
输出

11111000

11111111

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
 
public class Main { 
    public static void main(String[] args) {
        //处理输入
        Scanner in=new Scanner(System.in); 
        int M = in.nextInt();
        int N = in.nextInt();
        String user_input = in.next();
 
        // 表示各个芯片的剩余总容量
        double[] used = new double[N];
        for (int i=0;i= capacity) {
                    used[j] -= capacity;
                    break;
                }
            }
        }
 
        //输出
        for (int j=0;j

Python代码

import functools
import collections
import math
from itertools import combinations
from re import match
 
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
 
#并查集模板
class UF:
    def __init__(self, n=0):
        self.count = n
        self.item = [0 for x in range(n+1)]
        for i in range(n):
            self.item[i] = i
    def find(self, x):
        if (x != self.item[x]):
            self.item[x] = self.find(self.item[x])
            return 0
        return x
    
 
    def union_connect(self, x, y):
        x_item = self.find(x)
        y_item = self.find(y)
    
        if (x_item != y_item):
            self.item[y_item] = x_item
            self.count-=1
 
 
 
# 处理输入
M = int(input())
N = int(input())
user_input = input()
 
# 表示各个芯片的剩余总容量
used = [M*1.25 for i in range(N)]
 
# 按照用户配置分配每一个容量
for i in range(len(user_input)):
    capacity = 0.0
    if (user_input[i] == 'A'):
        capacity = 1.25
    elif (user_input[i] == 'B'):
        capacity = 2.5
    else :
        capacity = 10
    
 
    # 从第一块芯片开始分配
    for j in range(N):
        if (used[j] >= capacity):
            used[j] -= capacity
            break
        
    
 
 
#输出
for j in range(N):
    output_str=""
    
    for k in range(M-int(used[j]/1.25)):
        output_str += '1'
    
    for i in range(int(used[j]/1.25)):
        output_str += "0"
    
    print(output_str)
 

JS代码

function main(M,N,user_input) {
 
    // 表示各个芯片的剩余总容量
    let used = new Array(N).fill(M*1.25)
 
    // 按照用户配置分配每一个容量
    for (let i=0;i= capacity){
                used[j] -= capacity
                break
            }
        }
    }
            
        
 
 
    //输出
    for (let j=0;j

你可能感兴趣的:(华为,JavaScript,java)