用户工具

站点工具


2020-2021:teams:hotpot:tyxaisingprogrammingcontest2020

AIsing Programming Contest 2020

A - Number of Multiples

题目大意

给出$L,R,d$,问$[L,R]$中有多少$d$的倍数

数据范围

$1 \le L \le R \le 100$,$1 \le d \le 100$

解题思路

数据范围只有100,直接枚举即可

Comment

非常纯粹的水题

B - An Odd Problem

题目大意

给出$n$和$a_i$,问有哪些位置满足$i$和$a_i$都是奇数

数据范围

$1 \le n,a_i \le 100$

解题思路

直接按照题意枚举判断即可

Comment

非常纯粹的水题

C - XYZ Triplets

题目大意

定义$f(n)$是所有满足$x^2+y^2+z^2+xy+yz+zx=n$的三元组$(x,y,z)$的数量,现在给出$n$,求$f(1),f(2) \ldots f(n)$

数据范围

$1 \le n \le 10^4$

解题思路

看似$n$非常大,但是我们发现三元组中的$x,y,z$都不可能超过100,所以可以直接枚举$(x,y,z)$然后在算出的$N$的位置累计一个答案,最后从1到$n$一次输出即可,复杂度为$O(100^3)$

Comment

巧妙的暴力

D - The Best Vacation

题目大意

现在定义$f(x)$为$x$的二进制表示中1的个数,每次操作把$x$变成$x\ mod\ f(x)$,可以证明一定可以通过有限次操作把任意正整数$x$变成0,现在给出一个$n$位二进制数,$n$个询问,每次询问把这个二进制数的第$i$位反转后这个数需要几次变成0

数据范围

$1 \le n \le 2 \times 10^5$

解题思路

一开始给出的二进制数非常大,但是由定义我们知道只要操作一次就会变成一个$n$以内的数,所以我们可以逐位计算以后不断mod本身这个二进制数中1的个数就可以算出。现在的问题是如何处理出变一位以后的数,由于每次只变一位,我们可以先预处理出不变的情况,然后每次变得时候加上或减去这一位代表的数。因为每次最多变一位,所以$f(x)$一开始只能是原来的数量加一或减一,分别处理就可以。第一次算完后直接枚举即可,每次都会把剩下的数缩到原来的log以内

Comment

并不难想,但是细节非常多,比赛的时候还zz先写了个$O(n^2)$的算法之后才发现可以直接预处理。

E - Camel Train

题目大意

有$n$只骆驼,每只有$K_i,L_i,R_i$,现在要给这$n$只骆驼排队,如果一个骆驼在前$K_i$名则有$L_i$的收益,否则有$R_i$的收益,最大化收益

数据范围

多组数据,$1 \le T,n \le 10^5$,$1 \le L_i,R_i \le 10^9$,$\sum n \le 10^6$

解题思路

如果一个骆驼有$L_i > R_i$,那么它至少可以获得$R_i$的收益,之后我们把这些骆驼以关键字$L_i - R_i$放进小根堆,并且从前往后依次只保留$K_i$个进行贪心即可,$R_i > L_i$的需要从后往前再做一次

Comment

比较经典的贪心题,但是我不是很会贪所以比赛的时候没想出来。林佬好像比赛的时候想出来了但是因为优先队列默认是大根堆所以一直WA。

F不会

2020-2021/teams/hotpot/tyxaisingprogrammingcontest2020.txt · 最后更改: 2020/07/17 16:03 由 misakatao