2020-2021年度第二届全国大学生算法设计与编程挑战赛(冬季赛)——正式赛

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-2021年度第二届全国大学生算法设计与编程挑战赛(冬季赛)——正式赛相关的知识,希望对你有一定的参考价值。

目录

A题-塔

B题-日记

E题-神仙爱采药

I题-奇怪的传输机增加了

J题-奇怪的小鸭子也增加了

K题-关于哥俩好的数字数字这件事


A题-塔

思路:签到题,26层,第i层先打印26-i个空格,然后正序和逆序打印字符,每一层换一行。

public class Main 
    public static void main(String[] args) 
        for(int i=1; i<=26; i++)
            for(int j=1; j<=26-i; j++)
                System.out.print(" ");
            
            for(int k=1; k<=i; k++)
                System.out.print( (char)(k + 'A'- 1));
            
            for(int l=i-1; l>=1; l--)
                System.out.print( (char)(l + 'A' - 1));
            
            System.out.println();
        
    

B题-日记

思路:每次遇到相应的字母,就调3个,把相应的去掉就可以,测试用例应该有问题。 

public class Main 
    public static void main(String[] args) 
        String s = "smrt cvrst aebteibtiou aa btbtbtbtpapaprpopalbtlapabba\\n" +
                "bas jebte dosadnbtna ova kbtkebtemibtija aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtbba\\n" +
                "aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtdcsc\\n" +
                "bas jebte dosadnbtna ova kbtkebtemibtija\\n" +
                "ibti lbtlovebte lbtlibtinbtnkbtkebtec\\n" +
                "sadnbtna ova kbtkebtemibtija aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtbbz\\n" +
                "aszxdbtddbtddbtddbtddbtddbtddbtddbtddbtdcs\\n" +
                "bas jebte dosadnbtna ova kbtkebtemibtija" ;

        String ans = "" ;
        for(int i=0; i<s.length(); i++)
            char c = s.charAt(i) ;
            ans += c ;

            if(c=='l' || c=='i' || c=='n' || c=='k' || c=='e')
                    i += 3 ;
            
        
        System.out.print(ans);
    

E题-神仙爱采药

 思路:简单贪心,如果体积够用,有多少装多少,如果体积不够用,遇到体积为2的不用管,遇到体积为1的,将体积为2的踢出去,将体积为1的装进去,保证可以装的更多。

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        int V = input.nextInt() ;
        String s = input.next() ;

        long ans = 0,  volume=0, height=0, num2=0 ;

        for(int i=0; i<s.length(); i++)
            long c = s.charAt(i) - '0' ;
            if(volume+c<=V)
                if(c==2)
                    num2 ++ ;
                
                volume += c ;
                height ++ ;
            else
                if(num2>=1 && c==1)
                    volume -- ;
                    num2 -- ;
                
            
            ans += height ;
        
        System.out.println(ans);
    

这样写也是可以的,变量少一点,思路都是一样的。

import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        int V = input.nextInt() ;
        String s = input.next() ;
        long ans = 0, sum = 0, num2=0;

        for(int i=0; i<s.length(); i++)
            if(s.charAt(i)=='1' && V>=1)
                ans ++ ;
                V -- ;
            else if(s.charAt(i)=='1' && V<1)
                if(num2>0)
                    num2-- ;
                    V ++ ;
                
            
            if(s.charAt(i)=='2' && V>=2)
                ans ++ ;
                V -= 2 ;
                num2 ++ ;
            
            sum += ans ;
        

        System.out.println(sum);
    

I题-奇怪的传输机增加了

 思路:模拟每一天就可以,注意超过x天只能恢复一次,且最后打印的是YE5!和N0!不是YES!和NO!


import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        int N = input.nextInt() ;
        int x = input.nextInt() ;
        int y = input.nextInt() ;
        double now = N ;
        boolean flag = true ;

        for(int i=1; i<=y; i++)
          now = 2.0 * now / 3.0 ;
          if(i>=x)
              now = Math.min(now+(1.0*N/2), N) ;
              x = Integer.MAX_VALUE ;
           
          if(now<1.0*N/32)
              System.out.println("N0!");
              System.out.print(i + " ");
              System.out.printf("%.6f", now);
              flag = false ;
              break ;
          
        
        if(flag)
            System.out.println("YE5!");
            System.out.printf("%.6f", now);
        

    

J题-奇怪的小鸭子也增加了

 思想:数学题,说真话,题目描述的一言难尽。


import java.util.Scanner;

public class Main 
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        int A = input.nextInt() ;
        int B = input.nextInt() ;
        int a = input.nextInt() ;
        int b = input.nextInt() ;

        int x = (A-a)/a/2 + 1 ;
        int y = (B-b)/b/2 + 1 ;

        System.out.println(x*y);
    

K题-关于哥俩好的数字数字这件事

同样的代码,C++不超时,Java超时!!! 

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main 
    static final int N = 1000000;
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        int n = input.nextInt() ;
        List<List<Integer>> ans1 = new ArrayList<>() ;
        for(int i=0; i<N; i++)
            ans1.add(new ArrayList<>()) ;
        
        for(int i=1; i<=10000000; i++)
             ans1.get(get(i)).add(i) ; ;
        
        if(n==1)
            System.out.println(1);
        else if(n<=10)
            long res = 0 ;
            for(int i=0; i<n; i++)
                res += ans1.get(n-1).get(i) ;
            
            System.out.println(res);
        else if(n>=11)
            long res1 = Long.MAX_VALUE ;
            for(int j=9; j<=20; j++)
                long temp = 0 ;
                for(int i=0; i<n; i++)
                    temp += ans1.get(j).get(i) ;
                
                res1 = Math.min(temp, res1) ;
            
            System.out.println(res1);
        
    
    private static int get(int i)
        int ans = 0 ;
        while(i>0)
            ans += i % 10 ;
            i /= 10 ;
        
        return  ans ;
    

以上是关于2020-2021年度第二届全国大学生算法设计与编程挑战赛(冬季赛)——正式赛的主要内容,如果未能解决你的问题,请参考以下文章

2020-2021年度第二届全国大学生算法设计与编程挑战赛(冬季赛)——正式赛

2020-2021年度第二届全国大学生算法设计与编程挑战赛 (春季赛)- 天才的操作(线段树+主席树+树上倍增)

个人赛组2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)-正式赛

个人赛组2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)——热身赛

2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛)-正式赛 部分题解

2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛正式赛) 部分题题解