360笔试测试卷

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[n];

        for (int i = 0; i < n; i++) {
            arr[i]=sc.nextInt();

        }

        int[] ans=new int[n];
        //set记录已经遍历过的钥匙
        Set<Integer> set=new HashSet<>();
        int min=1;//代表第i个门

        for (int i = 0; i < n; i++) {
           if(arr[i]==min){
               ans[min-1]=i+1;
               min++;
           }
           while (set.contains(min)){
               ans[min-1]=i+1;
               min++;
           }
           set.add(arr[i]);
        }



        for (int i = 0; i < n; i++) {
            System.out.print(ans[i]+" ");
        }

    }

}
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int Q=sc.nextInt();
        int seed=sc.nextInt();


        Map<Integer,Integer> map=new HashMap<>();


        int jicha = 0;
        for(int i=0;i<Q;i++){
            int[] arr=method(Q,seed);
            int op=arr[0];
            int m=arr[1];
            int x=arr[2];
            seed=arr[3];
            // System.out.print(i+" "+op+" "+m+" "+x);
            // System.out.println();
            if(op == 1){
                if(map.containsKey(x)){
                    map.put(x,map.get(x)+1);
                }
                else map.put(x,1);
            }
            else if(op == 2){
                if(map.containsKey(x)){
                    int count=map.get(x);
                    count-=m;
                    if(count>0){
                        map.put(x,count);
                    }
                    else map.put(x,0);
                }
            }
            else{
                jicha = jicha ^ ((i+1)*jisuan(map));
                //System.out.println(jicha);
            }
        }

        System.out.println(jicha);
    }
    public static int[] method(int Q,int seed){
        seed = seed ^ (seed << 15);
        seed = seed ^ (seed >> 5);
        seed = seed ^ (seed << 1);
        seed = seed % (1 << 15);

        int op = (seed^ (seed << 7) ^ (seed >> 5)) % 3 + 1;
        int m= (seed ^ (seed <<6) ^ (seed >> 10)) % Q +1;
        int x= (seed ^ (seed << 5) ^ (seed << 9) ^ (seed >> 6)) % 10 + 1;
        return new int[]{op,m,x,seed};
    }
    public static  int jisuan(Map<Integer,Integer> map){
        int min=Integer.MAX_VALUE;
        int max=Integer.MIN_VALUE;
        for(Map.Entry entry:map.entrySet()){
            if((int)entry.getValue()>0){
                min=Math.min(min,(int)entry.getKey());
                max=Math.max(max,(int)entry.getKey());
            }
        }
        //System.out.println(max-min);
        return max-min;
    }

#360笔试##360#
全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务