2022-4-13华为笔试

第一题:模拟 100%
package org.huawei;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=Integer.parseInt(sc.nextLine());
        node[] nums=new node[n];

        PriorityQueue<node> queue1=new PriorityQueue<>(new Comparator<node>() { 
                         public int compare(node o1, node o2) {
                if(o1.cpuCore!=o2.cpuCore){
                    return o1.cpuCore-o2.cpuCore;
                }else if(o1.mem!=o2.mem){
                    return o1.mem-o2.mem;
                }else{
                    return o1.id-o2.id;
                }
            }
        });

        PriorityQueue<node> queue2=new PriorityQueue<>(new Comparator<node>() {         
                        public int compare(node o1, node o2) {
                if(o1.mem!=o2.mem){
                    return o1.mem-o2.mem;
                }else if(o1.cpuCore!=o2.cpuCore){
                    return o1.cpuCore-o2.cpuCore;
                }else{
                    return o1.id-o2.id;
                }
            }
        });

        PriorityQueue<node> queue3=new PriorityQueue<>(new Comparator<node>() { 
                         public int compare(node o1, node o2) {
                return o1.id-o2.id;
            }
        });

        for(int i=0;i<n;i++){
            String[] s=sc.nextLine().split(",");
            nums[i]=new node(Integer.parseInt(s[0]),Integer.parseInt(s[1]),Integer.parseInt(s[2]),Integer.parseInt(s[3]),Integer.parseInt(s[4]));
        }
        String[] ss=sc.nextLine().split(" ");
        int nn=Integer.parseInt(ss[0]);int strategy=Integer.parseInt(ss[1]);int cpuCount=Integer.parseInt(ss[2]);
        int memSize=Integer.parseInt(ss[3]);int cpuArch=Integer.parseInt(ss[4]);int supportNp=Integer.parseInt(ss[5]);



        if(strategy==1){
//            cpu优先
            for(int i=0;i<n;i++){
                if((cpuArch==9||cpuArch==nums[i].cpu)&&(supportNp==2||supportNp==nums[i].isSpeed)&&(nums[i].cpuCore>=cpuCount)&&(nums[i].mem>=memSize)){
                    queue1.offer(nums[i]);
                }
            }
            int cnt=0;
            while (!queue1.isEmpty()) {
                if(cnt>=nn){
                    break;
                }
                node p=queue1.poll();
                queue3.offer(p);
                cnt++;
            }

        }else{
            for(int i=0;i<n;i++){
                if((cpuArch==9||cpuArch==nums[i].cpu)&&(supportNp==2||supportNp==nums[i].isSpeed)&&(nums[i].cpuCore>=cpuCount)&&(nums[i].mem>=memSize)){
                    queue2.offer(nums[i]);
                }
            }
            int cnt=0;
            while (!queue2.isEmpty()) {
                if(cnt>=nn){
                    break;
                }
                node p=queue2.poll();
                queue3.offer(p);
                cnt++;
            }
        }
        System.out.print(queue3.size());
        int[] res=new int[queue3.size()];
        int index=0;
        while (!queue3.isEmpty()) {
            node re=queue3.poll();
            res[index++]=re.id;
        }
        for(int i=0;i<index;i++){
            System.out.print(" "+res[i]);
        }
    }
}
class node{
    int id;
    int cpuCore;
    int mem;
    int cpu;
    int isSpeed;
    public node(int id,int cpuCore,int mem,int cpu,int isSpeed){
        this.id=id;
        this.cpuCore=cpuCore;
        this.mem=mem;
        this.cpu=cpu;
        this.isSpeed=isSpeed;
    }
}            

第二题  贪心吧,不知所云
第三题  乱搜  5%

package org.huawei;

import java.util.*;

public class Test01 {
    static List<int[]> res=new ArrayList<>();
    static List<int[]> rr=new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] nums=new int[n];
        int sum=0;
        for(int i=0;i<n;i++){
            nums[i]=sc.nextInt();
            sum+=nums[i];
        }
//        System.out.println("zui"+sum);
        if(sum%2!=0){
            System.out.println(-1);
        }else{
            int re=sum/2;
            boolean[] vis=new boolean[n];
            dfs(nums, re, 0, vis);
//            System.out.println("daxia"+res.size());
            if(res.size()==0){
                System.out.println(-1);
                return;
            }
            System.out.println(re);


            List<Integer> r=new ArrayList<>();
            Set<Integer> set=new HashSet<>();
            for(int i=0;i<res.size();i++){
                set.add(res.get(i)[1]);
            }
            for(int i=0;i<n;i++){
                if(!set.contains(i)){
                    r.add(nums[i]);
                }
            }

//            System.out.println("大小"+res.size());
            List<Integer> rrr=new ArrayList<>();
            for(int i=0;i<res.size();i++){
                rrr.add(res.get(i)[0]);
            }
            Collections.sort(rrr);
            Collections.sort(r);
            Collections.reverse(rrr);
            Collections.reverse(r);

            for(int i=0;i<r.size();i++){
                if(i==r.size()-1){
                    System.out.println(r.get(i));
                }else{
                    System.out.print(r.get(i)+" ");
                }
            }
            for(int i=0;i<rrr.size();i++){
                if(i==(rrr.size()-1)){
                    System.out.print(rrr.get(i));
                }else{
                    System.out.print(rrr.get(i)+" ");
                }
            }
//            System.out.println("========");

        }
    }
    public static void dfs(int[] nums, int re, int cur,boolean[] vis){
        if(cur==re){
            res=new ArrayList<>(rr);
            return  ;
        }
        if(cur>re){
            return;
        }
        //通过回溯
        for(int i=0;i<nums.length;i++){
            if(!vis[i]){
                vis[i]=true;
                cur+=nums[i];
                rr.add(new int[]{nums[i],i});
                dfs(nums,re,cur,vis);
                vis[i]=false;
                cur-=nums[i];
                rr.remove(rr.size()-1);
            }
        }
    }
}


全部评论
// we have defined the necessary header files here for this problem. // If additional header files are needed in your program, please import here. #include<bits/stdc++.h> using namespace std; int main() {     int n;     cin >> n;     int ans = 0;     vector<pair<int, int>> tmp;     for(int i = 0; i < n; ++i){         int a, b;         cin >> a >> b;         tmp.push_back(make_pair(a, b));     }     sort(tmp.begin(), tmp.end(), [](pair<int, int>& a, pair<int, int>& b){ return a.first == b.first ? a.second > b.second : a.first < b.first; });          int start = 0;     for(int i = 1; i <= 7 * 105 && start < n; ++i){         for(int j = start; j < n; ++j){             if(tmp[j].first >= i){                 ans += tmp[j].second;                 start = j + 1;                 break;             }         }     }     cout << ans;     return 0; } 第二题25%,不知道哪里有问题
1 回复 分享
发布于 2022-04-13 21:29
楼主第二题多少分呀,我感觉想法是对的,提交答案是0
点赞 回复 分享
发布于 2022-04-13 21:22
第一题忘了最终的排序,寄了
点赞 回复 分享
发布于 2022-04-13 22:57
需要华为机试题库私聊
点赞 回复 分享
发布于 2022-05-08 22:13

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
6 16 评论
分享
牛客网
牛客企业服务