T1:
题目大意:有m道判断题,答案是'Y'或者'N',有n个人,每个人都给出了m个答案
再告诉你全对人p的和全错的人q的个数,求标准答案,如有多解,求字典序最小的,无解打-1
m<=500 n<=30000 0<=p 0<=q p+q<=n
这题还是比较水,就是细节比较多
先假设p!=0,这样就肯定有一个答案是标准答案,于是我们先把每个人的答案hash
再把他们的hash值排序,就可以枚举哪个是标准答案,如果其出现次数是p,就再求出它的全错的hash值,在判断是否为q就行了
当p=0,q!=0时把p与q swap一下,这样就只要求字典序最大的,最后输出时在反过来就行了 复杂度O(nlog2(n))
当p!=0,q!=0时,就代表没有一个是标准答案,也没有一个是全错方案,于是我们人的答案反过来加上去,就表示标准答案与那2*n个答案都不同
于是从全是N开始,在慢慢往上加就行了 复杂度O(nlog2(n))
T2:
题目大意:给你一个序列a[1]到a[n] n个数字,然后你要选出两个非空集合S和T
满足任意x属于S,y属于T,x<y 且
设s大小为p,t大小为q
a[s1] xor a[s2] xor a[s3] xor ... xor a[sp]==a[t1] and a[t2] and ... and a[tq]
求满足条件的(s,t)的个数
n<=1000,0<=a[i]<1024
这题解法很神,当时没想出来
两个数相等,可以看成xor起来等于0,所以题目转化为 a[s1] xor a[s2] xor ... xor a[sp] xor a[t1] and a[t2] and ... and a[tq]==0
所以有DP f[i][j][0]代表到了i,值为j,是and的方案数,f[i][j][1]代表到了i,值为j,是xor的方案数
就有转移 f[i][j][0]=f[i+1][j][0], f[i][a[i]&j][0]+=f[i+1][j][0]; f[i][j][1]=f[i+1][j][1],f[i][j^a[i]][1]+=f[i+1][j][0]+f[i+1][j][1];
初值为f[i][a[i]][0]=1;答案就是f[1][0][1];这题还要用到高精度,因为只有加法操作,所以可以压9位 复杂度O(n*1024*40) 40是高精度位数
T3:
题目大意:给你一个n个点m条带权双向边的可能有重边有自环的图,起点在1,问你可不可能在T时刻到达n号点 n<=50 m<=100 T<=1e18 边权<=10000
设dis[i][j]代表到达i好点,时间t满足t=j+pD p属于非负整数 的最小的t
题目大意:有m道判断题,答案是'Y'或者'N',有n个人,每个人都给出了m个答案
再告诉你全对人p的和全错的人q的个数,求标准答案,如有多解,求字典序最小的,无解打-1
m<=500 n<=30000 0<=p 0<=q p+q<=n
这题还是比较水,就是细节比较多
先假设p!=0,这样就肯定有一个答案是标准答案,于是我们先把每个人的答案hash
再把他们的hash值排序,就可以枚举哪个是标准答案,如果其出现次数是p,就再求出它的全错的hash值,在判断是否为q就行了
当p=0,q!=0时把p与q swap一下,这样就只要求字典序最大的,最后输出时在反过来就行了 复杂度O(nlog2(n))
当p!=0,q!=0时,就代表没有一个是标准答案,也没有一个是全错方案,于是我们人的答案反过来加上去,就表示标准答案与那2*n个答案都不同
于是从全是N开始,在慢慢往上加就行了 复杂度O(nlog2(n))
T2:
题目大意:给你一个序列a[1]到a[n] n个数字,然后你要选出两个非空集合S和T
满足任意x属于S,y属于T,x<y 且
设s大小为p,t大小为q
a[s1] xor a[s2] xor a[s3] xor ... xor a[sp]==a[t1] and a[t2] and ... and a[tq]
求满足条件的(s,t)的个数
n<=1000,0<=a[i]<1024
这题解法很神,当时没想出来
两个数相等,可以看成xor起来等于0,所以题目转化为 a[s1] xor a[s2] xor ... xor a[sp] xor a[t1] and a[t2] and ... and a[tq]==0
所以有DP f[i][j][0]代表到了i,值为j,是and的方案数,f[i][j][1]代表到了i,值为j,是xor的方案数
就有转移 f[i][j][0]=f[i+1][j][0], f[i][a[i]&j][0]+=f[i+1][j][0]; f[i][j][1]=f[i+1][j][1],f[i][j^a[i]][1]+=f[i+1][j][0]+f[i+1][j][1];
初值为f[i][a[i]][0]=1;答案就是f[1][0][1];这题还要用到高精度,因为只有加法操作,所以可以压9位 复杂度O(n*1024*40) 40是高精度位数
T3:
题目大意:给你一个n个点m条带权双向边的可能有重边有自环的图,起点在1,问你可不可能在T时刻到达n号点 n<=50 m<=100 T<=1e18 边权<=10000
这题我只想出了O(mk)的做法,打了个30分的暴力
设dis[i][j]代表到达i好点,时间t满足t=j+pD p属于非负整数 的最小的t
这个我们可以用spfa来处理 , 最后的答案就是dis[n][T%D]是否小于T 复杂度O(k*2*n*d*m) k为spfa常数,d为最小的边权,但是有用状态非常少,所以还是可以过的
测的时候第二题不知道哪里打挂了,连暴力分都没拿全,第一题写了拍完将近用了2h,第三题rp不是很好,随机的点一个都没过(经计算,有20%的几率是可以过点的)