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