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

Posted nuist__NJUPT

tags:

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

目录

A题-抽奖

B题-分配颜色

C题-CTF


A题-抽奖

 思路:逻辑题,需要实时记录当前的星辉数和剩余的发数,只要剩余的星辉数大于等于5,则可以兑换一次发数。AC代码如下:

import java.util.Scanner;

public class Main 
    static int x ;
    static int ans ;
    static int star ;
    static int leave ;
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        x =  input.nextInt() ;

        ans = x / 160; //原石能抽的发数
        star = ans / 10 * 3; //当前的星辉数量
        leave = ans % 10 ; //剩余的发数
        while(star>=5) 
            int temp = star / 5 ;
            ans += temp ;
            star = (star%5) + ((temp+leave)/10)*3 ;
            leave = (temp+leave)%10;
        

        System.out.println(ans);

    

B题-分配颜色

思路:排列组合,这题用Java写挺坑的,需要用long型,不然即便取余还是会溢出,坑爹啊。AC代码如下:

组合计数,分析可知最后蓝色的方格即为被操作过奇数次的位置。

考虑最终有i行,j列被操作过奇数次的状态,该状态共有i*m+j*n-2*i*j个蓝色方格,若方格数等于t则可能对答案产生贡献。(i,j)状态共有C(n,i)*C(m,j)种情况。

易知如果p<i或q<j,或者剩余的操作次数p2、q2为奇数,则该状态无法到达。否则只要考虑将剩余的p2和q2次操作,p2和q2分贝两两一组随机选取某些行即可,共有C(n+p2/2-1,p2/2)*C(m+p2/2-1,p2/2)种情况。

因此答案ans=Sigma C(n,i)*C(m,j)*C(n+p2/2-1,p2/2)*C(m+q2/2-1,q2/2)
 

import java.util.Scanner;

public class Main 
    static long n, m, p, q, t ;
    static long ans1 = 0 ;
    static long mod = 555555555 ;
    static long [][] c = new long [3112][3112] ;

    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        n = input.nextLong() ;
        m = input.nextLong() ;
        p = input.nextLong() ;
        q = input.nextLong() ;
        t = input.nextLong() ;
        init();
        for(int i=0; i<=n; i++)
            for(int j=0; j<=m; j++)
                if(i>p || j>q)
                    continue;
                
                if(i*m+j*n-2*i*j!=t)
                    continue;
                
                if((p-i)%2==1 || (q-j)%2==1)
                    continue;
                
                    ans1 = (ans1 + f(i, j)) % mod;
            
        
        System.out.println(ans1);
    
    private static long f(int p1, int q1)

        long p2 = p - p1 ;
        long q2 = q - q1 ;


        p2 /= 2 ;
        q2 /= 2 ;

        long ans = 1 ;
        ans = ((c[(int)n][p1]%mod) * (c[(int)m][q1]%mod)) % mod ;
        ans = (ans * c[(int)(n+p2-1)][(int)p2]) % mod ;
        ans = (ans * c[(int)(m+q2-1)][(int)q2]) % mod ;
        return ans ;
    


    static void init()
    
        for(int i=0; i<3112; i++)
            for(int j=0; j<=i; j++)
                if(j==0)  c[i][j] = 1;
                else  c[i][j] = (c[i-1][j] + c[i-1][j-1]) %mod;
    



C题-CTF

思路:也是逻辑题,思路很简单,注意细节,AC代码如下:

import java.util.Scanner;

public class Main 
    static int t ;
    static int x = 0;
    static int mi ;
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in) ;
        t = input.nextInt() ;
        mi = 1 ;

        while(t>=Math.pow(2,mi))
            x += Math.pow(2,mi)*mi ;
            t -= Math.pow(2,mi);
            mi ++ ;
        
        System.out.println(x + t * mi);

    

以上是关于个人赛组2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)——热身赛的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 占座位(最小割)

2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 占座位(最小割)

2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 占座位(最小割)