A
UVALive6843
给定N
询问0到N这N+1个数分别和0到N这些数相乘一共会产生多少不相同的数。
bitset+打表
两层for循环暴力枚举
B
UVALive6844
计算以下式子
其中,0<=low<=high<=16*1011
首先有一个可以由数学归纳法证明的结论:对于C(n,k),若n&k == k 则c(n,k)为奇数,否则为偶数。
然后就可以把问题转换为0到x的2进制表示中,有0个1的有a[0]个,1个1的有a[1]个,...
答案就是(1<<0)*a[i]+(1<<1)*a[1]+....
这个a[i]可以用数位dp求
枚举x的哪一位为1,把这一位变成0,后面的就可以随便放
C
D
E
UVALive6847
定义f(x)表示x的阶乘的末尾有几个0
询问l到r的区间中有几个不同的f(x)(0<l<=r<=9*1018)
考虑每次出现5的倍数就会跳变一次,当然,跳变的幅度不一定是1
所以答案就是r/5-l/5+1;
F
UVALive6848
水dp
G
UVALive6849
给定一个n*m的矩阵(n,m<=1000),每个格子会统计以它为中心的九宫格一共有多少雷,假如这个地方放了一个雷,值再额外+3
现在把值给出来,然后要求把雷的放置恢复出来。
数据保证答案唯一
从上往下,从左往右扫。
每次遇到有雷,就把九宫格更新
考虑当前格子(i,j)
假如值超过4,那么一定是雷
小于4,一定不是雷
等于4,判断mat[i][j+1]是否>=4,假如是,一定是雷
具体的画一下就知道了
不是雷
...
..L
LLL
对于mat[i][j],取值是6、7、8
是雷
...
.L.
...
对于mat[i][j],取值是1、2、3
H
UVALive6850
就给一个n*m的矩阵(n<=30,m<=30)
找出所有的加号
加号可能相互覆盖
加号的高和宽相等
一个加号的中心不会在另一个加号上
按照第四个准则,加号的中心的值一定是1
于是把所有的1挑出来
dfs一遍
可以绕过这个1
也可以枚举长度,然后把1个加号拿掉
I
UVALive6851
怎么会有这么傻逼的网络流。。。
J
UVALive6852
对于长度为M的区间进行N次涂色
涂色的方式是每b个数,涂前a个数
1<=N<=105,1<=M<=106,1<=a<=b<=16
虽然涂色的次数很多,但涂色的种类很少
注意到长度相同的都是可以一起涂的
复杂度降为M*16
K
UVALive6853
水dp
L
UVALive6854
给定一个n*m的矩阵(n,m<=500)
每个格子可能会向周围的4个格子连边
现在给定每个格子向周围连的边数,只有唯一一个格子是不知道的,询问那个格子的值
就把矩阵按照
0101
1010
编号
统计0的值和1的值,输出相减的绝对值。