A - Stones
题意
有三堆石头,两种操作:
- 取出第一堆一个石头和第二堆两个石头
- 取出第二堆一个石头和第三堆两个石头
问用这两种操作最多能取出多少石头。
做法
贪心。因为两种操作执行一次都会取出三个石头,而第二堆石头在两种操作都会被取出石头,所以我们想要让第二堆石头尽可能多的承受操作。由于第二种操作只消耗一个第二堆中的石头,所以我们先尽可能多的先执行第二种操作,然后再去执行第一种操作。
AC代码
1 |
|
B - Alice and the List of Presents
题意
有$n$种礼物(数量无限),要装到$m$个盒子里面。对于每个盒子能装$0$到$n$种礼物,但是每种礼物只能装一个。最后要使这$m$个盒子里面存在所有$n$种礼物,问方案数。
做法
推导。对于每种礼物单独考虑,比如对于第一种礼物,它出现在第$1$个盒子,第$2$个盒子,…第$m$个盒子;第
$1$、$2$个盒子,第$1$、$3$个盒子,…第$n-1$,$n$个盒子;…第$1$、$2$、…$n$个盒子。总共有$2^m-1$种情况,那么对于$n$种礼物则有$(2^m-1)^n$种方案。
AC代码
1 |
|
C - Labs
题意
有$n^2$个数,分别为$1$到$n^2$,将他们分到$n$个集合里,每个集合有$n$个数。对于集合$A$,$B$,$f(A,B)$表示$A$中数大于$B$中数的对数。构造出这$n$个集合,使所有集合两两之间$f(A,B)$的最小值最大。
做法
对于两个$n$个元素的集合,其中元素两两配对有$n^2$种,所以$f(A,B)=n^2-f(B,A)$,要使两两之间$f(A,B)$最小值最大,只有$f(A,B)$,$f(B,A)$尽可能相等($n^2$为偶数时相等,奇数时差$1$)。构造方法见代码。
AC代码
1 |
|
D - Alice and the Doll
题意
一个$n*m$的矩阵,其中有$k$个障碍物,问从$(1,1)$出发能否走完所有无障碍物的格子(每个空格只能走一次且在一个空格上只能右转一次不能左转)。
做法
模拟。模拟走的过程,一直直走遇到障碍物或边界右转继续走,直到无法行动。记录走过的空格数,最后若等于$n*m-k$则可以走完,否则不可以。
AC代码
1 |
|
return 0;
本文链接:
https://luojinrong.github.io/2019/10/18/Round-593-Div-2/