https://atcoder.jp/contests/abc274/tasks

G - Security Camera 3

给定 h行W列, 一些地方是障碍

问最少安装多少摄像头, 能监控所有非障碍区域,

一次安装 在一个非障碍区域并监控它自身和朝向(4向)的一段连续的非障碍区域

同一个地方可以安装多个不同向的

范围

h,w 300

2s

1024mb

我的思路

把连续一段横着 或者竖着 看作一个单位

那么 对于(i,j) 所在的横的r_x, 和竖的c_y

有关系r_x+c_y >= 1

所有 r和c的取值只能1/0

要 所有r+c 的和最小

似乎是个线性规划?

閱讀全文 »

https://atcoder.jp/contests/abc260/tasks

Ex - Colorfulness

n球, 颜色ci

f(球的一个排列) = 相邻不同色的个数

对于k=1..m分别求 $\sum(f(排列)^k)$ mod 998244353

范围

n 2.5e5

m 2.5e5

ci [1,n]

8s

1024mb

我的思路

k==1 时

那颜色可以分开考虑

一个颜色 去计算它能构成x个间隔, 那么它每个贡献 (x+1(两端))/2, 再乘上方案数

注意每个排列的最左和最右还要-1, 所以还要减 n!


k==2时

明显就不一样了, 因为贡献变成了 (相邻不同色)^2

颜色c 有 x间隔 ( (x+1) + 其它颜色间隔贡献 -1)^2

问题 其它颜色贡献会受到颜色c的间隔数x 影响


如果直接按照题目来, 按f(P)归类

如果能算出 不同为y个的 出现次数t(y)

那么 就是 f(1) = sum t(y) * y

f(2) = sum t(y) * y^2

这样做也是 需要O(n m) 的

而且怎么算不同出现次数也没啥想法

閱讀全文 »

https://atcoder.jp/contests/abc273/tasks

G - Row Column Sums 2

求个数mod 998244353

nxn的矩阵, 元素非负整数

行i 和为ri

列i 和为ci

范围

n 5000

ri,ci [0,1,2]

3s

1024mb

我的思路

这 ri, ci很有说法,

显然 sum r == sum c

说明每行/列只有4种情况 全0,1个1,2个1,1个2

而全零的行列可以直接删掉

如果是一个2的情况, 那么显然对应到另一个2的

因此变成

一些 行列为2的成对 直接填2, 剩余的 只有 1个1 和2个1

行 (a个1,b个2)

列 (c个1,d个2)

选出 t个填2的行列

sum binom(b,t) * binom(d,t) * t!(其中行定,列匹配) * f(a,b-t,c,d-t)


因为上面枚举了t

希望能在小于O(N)的时间 算出 f(a,b,c,d) = 行(a个1,b个2) 列(c个1,d个2) 全部拆成1和1+1的方案

注意到a,c 不变 考虑最小的b,d 比如f(a,b,c,0)的情况, 比较好算, = c!/(c-a)! * binom(2b,2) * binom(2b-2,2) * binom(2b-4,2) …

1
2
3
  1 1 1 1 1 1
a
b

然后考虑 每次b和d增1

1
2
3
4
  1 1 1 1 1 1 2
a j
b
2 i x

如果这增的两个选了, 那么4种情况

对应原来一种情况, 是原来一个(1,1) 指向的

1
2
3
4
5
6
7
  1 2
1 j
2 i x
```

对应原来一种情况, 是原来一个(1,2) 或(2,1) 指向的

1 2

2 1 j
2 i x

1
2
3
4
5
6
7
8

对应原来一种情况, 是原来一个(2,2) 指向的

````
2 2
1
2 1 j
2 i x

对应 [b-2][d-2] 的情况 前面还插入了两个

1
2
3
    2 2
2 1 j
2 i x

f[b][d] = f[b-1][d-1] * (a+2*(b-1)) + f[b-2][d-2] * (d-1)*(b-1)

然后考虑说 新增的没有共点 ???????????????????????????????????

1
2
3
4
      2
1
1
2 1 1

上面 看起来是二维, 然而实际上b和d的差为定值, 所以是个一维的

diff=d-b >= 0

f[b] = f[b-1] * (a+2*b) + f[b-2] * (b+diff-1)*(b-1)

但是不共点的情况 咋讨论啊, 感觉好多啊, 不会了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  1
1
11

1
11
11

1 1
1
11

1 1
11
11

11
1
11

1
1 1
11

11
1 1
11

难道 对 这种2x2 的形态进行计数, f[i][状态=6] ?

閱讀全文 »

https://atcoder.jp/contests/abc272/tasks

G - Yet Another mod M

给长n数列A, distinct( ai != aj)

问是否存在 m \in [3,1e9]

使得 a[i]=a[i]%m 后,

有一半以上的数为某个x,(存在x使得x的个数 > 非x的个数)

范围

n 5000

ai 1e9

2s

1024mb

我的思路

感觉又是数论什么的, 不过这个n 5000 不知道是有什么n^2的说法吗

首先假设 能有x(m) 满足

显然 若p为m的因子

那么 这些 xi%m == x(m) 的 对应 xi%p = (xi%m)%p = x(m) %p 依然满足

所以只用考虑 质数 和 2 * 质数, 又因为2*质数 如果合法,则质数合法, 当为2^幂次时, 校验4即可

所以 只用考虑 质数


如果本来就有数字次数大于一半, 那么随便取

否则必定会让原来不等的两个数相等

考虑两个不等的数 ai,aj

ai % m == aj % m

(ai-aj) %m = 0

所以枚举质因子

但这样是 n^2 sqrt(ai) n

感觉并过不了? 上质因子拆解模版?


还是先收集完(ai-aj)

然后同时进行质因数查找

关键验证还需要n


(ai-aj)%m == 0 等价与 它们mod m后相等

换句话说, 收集ai-aj 后

如果 有t > n/2个值相等

那么两两成边 t(t-1)/2 条边, 即 ai-aj 需要 >= t(t-1)/2

这样的话 直接在收集后 的ai-aj 中枚举m????(O(max(ai/2)))

不会

閱讀全文 »

https://atcoder.jp/contests/abc271/tasks

G - Access Counter

给定 长24的C

如果 Ci==T, 甲 X % 可能访问

如果 Ci==A, 乙 Y % 可能访问

超过的C看作循环

好的状态 = 甲不是第N次方案的

求好的状态的 概率 mod 998244353

范围

n 1e18

x,y [1,99]

|c| == 24

2s

1024mb

我的思路

先最无脑的

dp[i][j] = 第i个被访问, 且是第j次 的概率

dp[i][j] = dp[k < i][j-1] * prod p[k+1..i-1] 不被访问 p[i]

ans = sum dp[i是乙][n]

然而是个无限的求和


要干掉无限

那么换个角度

dp[j][idx] 第j次访问, 位置在C[idx] 的概率

dp[j][idx] = dp[j-1][i=0..23] * p[i->idx] 从i开始下一次访问idx, 中间不访问其它的概率

这里把dp[j] 看成一个向量, p与j无关的常系数矩阵, 不就是矩阵快速幂了!


所以如何算p[pos0 -> pos1]

直接走到 = prod(1-p[pos0+1..pos1-1]) * p[pos1]

绕一圈走到 = prod(1-p[pos0+1..pos1-1]) * prod(1-p[...]) * p[pos1]

绕两圈走到 = prod(1-p[pos0+1..pos1-1]) * prod(1-p[...])^2 * p[pos1]

综上 = prod(1-p[pos0+1..pos1-1]) * p[pos1] * 1/(1-prod(1-p[...]))

问题来了, 如果分母为0 怎么办?

閱讀全文 »
0%