zoukankan      html  css  js  c++  java
  • 笔试

    360 笔试

    1:最后赢家

    时间限制:C/C++语言 1000MS;其他语言 3000MS
    内存限制:C/C++语言 65536KB;其他语言 589824KB

    题目描述:

    最强的不一定是最后的赢家。

    某赛事有n名选手参加,但是不同于其他的比赛,本比赛采取的是擂台赛的形式,n名选手排成一排,每次队伍的第一位和第二位选手进行比赛,输的一方会排到队尾。

    当某位选手取得m连胜时,他将成为最后的赢家,且游戏结束,请问截止到游戏结束,共会进行多少次比赛。

    两位选手的比赛结果由他们的战斗力决定,n位选手的战斗力是一个1~n的排列,也就是说他们的战斗力两两不同,不会有平局的情况。

    输入

    输入第一行包含两个正整数n,m,分别代表参赛选手数量和取得连胜的要求。(1<=n<=100000,1<=m<=10^9)

    输入第二行包含n个正整数,中间用空格隔开,第i个数表示队伍的第i位选手的战斗力,整体是一个1~n的排列。

    输出

    输出仅包含一个正整数,表示截止到游戏终止,共进行多少场比赛。

    样例输入

    4 2
    1 3 2 4

    样例输出

    2

    提示

    样例解释
    显然第一局应该是战斗力为3的选手获胜,第二局同样是战斗力为3的选手获胜,2连胜终止游戏,所以答案是2。此时若修改m为3,则结果是5。
    
    
    import java.util.ArrayDeque;
    import java.util.Scanner;
    
    public class S4 {
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n,m;
            n=in.nextInt();
            m=in.nextInt();
            ArrayDeque<Node> queue=new ArrayDeque<Node>();
            for (int i = 0; i < n; i++) {
                Node node = new Node(in.nextInt(), 0);
                queue.add(node);
            }
            int kk=0;
            boolean flag=false;
            while(!queue.isEmpty()) {
                for (int i = 0; i < queue.size(); i++) {
                    Node node = queue.element();
                    //System.out.println(node.grade);
                    if(node.grade==m) {
                        flag=true;
                        break;
                    }
                }
                if(flag)break;
                Node f1=queue.poll();
                Node f2=queue.poll();
                if(f1.s>f2.s) {
                    f1.grade=f1.grade+1;
                    queue.addFirst(f1);
                    queue.addLast(f2);
                }else {
                    f2.grade=f2.grade+1;
                    queue.addFirst(f2);
                    queue.addLast(f1);
                }
                kk++;
            }
            System.out.println(kk);
        }
    
    }
    class Node{
        int s=0;
        int grade=0;
        public Node(int s, int grade) {
            this.s = s;
            this.grade = grade;
        }
    }

    2:随机减法

    时间限制:C/C++语言 2000MS;其他语言 4000MS
    内存限制:C/C++语言 131072KB;其他语言 655360KB

    题目描述:

    给定一个数a0,定义如下随机序列a1,a2,...an

    1、从闭区间[0,a0]中等概率随机选出一个整数k0,令a1=a0-k0

    2、得到随机数a1之后,再从闭区间[0,a1]中等概率随机选出一个整数k1,再令 a2=a1-k1

    3、一般地,得到随机数ai之后,再从闭区间[0,ai]中等概率随机选出一个整数ki,令ai+1=ai-ki

    问an=0的概率是多少?

    输入

    输入两个整数n,a0(1≤n,a0≤100)。

    输出

    输出概率,小数点后四舍五入保留5位小数。

    样例输入

    3 3

    样例输出

    0.72049

    提示

    输入样例2
    1 3
    输出样例2
    0.25000
    
    输入样例3
    100 3
    输出样例3
    1.00000

    我 没有思路: 参考这个https://blog.csdn.net/sinat_36246371/article/details/52962874

    错误思路:
    import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    public class S5 {
    	
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		Random random = new Random();
    		int n,a0;
    		n=in.nextInt();
    		a0=in.nextInt();
    		int [] arr=new int[100];
    		for (int i = 0; i < arr.length; i++) {
    			arr[i]= random.nextInt(n);
    		}
    		System.out.println(Arrays.toString(arr));
    		for (int i = 0; i < arr.length; i++) {
    			   if(a0 < 0) {
    				   break;
    			   }
    			   System.out.println(a0);
    			   int t=random.nextInt(a0);
    			   int k=arr[t];
    			   int a1=a0-k;
    			   swap(arr,t);
    			   a0=a1;
    		}
    		System.out.println(Arrays.toString(arr));
    	}
    
    	private static void swap(int[] arr, int t) {
    		int temp=arr[arr.length-1];
    		arr[arr.length-1]=arr[t];
    		arr[t]=temp;
    	}
    

      





    
    
  • 相关阅读:
    XJ20夏令营做题记录(长期更新)
    洛谷P6623——[省选联考 2020 A 卷] 树
    [游记] 2020ZJOI 爆零记
    CF1017G——The Tree
    CF715E—— Complete the Permutations
    学习笔记——树的初步整理
    学习笔记——DP初步整理
    洛谷P5290——春节十二响
    POJ3017——Cut the Sequence(单调队列+堆优化DP)
    Java控制整形输入的法子
  • 原文地址:https://www.cnblogs.com/dgwblog/p/12714760.html
Copyright © 2011-2022 走看看