ALL:7
AC:5
补题:1
Rank:447
D. The Number of Imposters
题意:
有
n
n
n 个人,每个人可能是诚实的人或者说谎的人。
诚实的人永远说真话,说谎的人永远说假话。
有
m
m
m 个条件,分别表示
a
i
a_i
ai 说
a
j
a_j
aj 是诚实的人/说谎的人。
你需要判断在这些限制条件下,最多有可能有几个诚实的人,或输出 -1
声明不可能存在这种情况。
思路:我们用 0 / 1 0/1 0/1 代表 好人 / 坏人 。对于 a i a_i ai 说 a j a_j aj 是 0 / 1 0/1 0/1 这件事情:
-
如果 a i a_i ai 说 a j a_j aj 是 0 0 0 ,那么 a i a_i ai 是好人且 a j a_j aj 是好人,或者 a i a_i ai 是坏人且 a j a_j aj 是坏人。即 a i ⊕ a j = 0 a_i\oplus a_j=0 ai⊕aj=0 。
-
如果 a i a_i ai 说 a j a_j aj 是 1 1 1 ,那么 a i a_i ai 是好人且 a j a_j aj 是坏人,或者 a i a_i ai 是坏人且 a j a_j aj 是好人。即 a i ⊕ a j = 1 a_i\oplus a_j=1 ai⊕aj=1 。
那么每一个语句可以看作一条边权为 0 / 1 0/1 0/1 的连接 i , j i,j i,j 的边,表示 a i ⊕ a j = 0 / 1 a_i\oplus a_j=0/1 ai⊕aj=0/1 ,每一个点的颜色未知,求这个无向图在没有奇数环的情况下的最大 0 / 1 0/1 0/1 颜色数量。染色法跑一边即可。
AC代码:https://codeforces.com/contest/1594/submission/178051466
E2 DP 较复杂,没有补。
F. Ideal Farm
题意:
Farmer John 有 s s s 只奶牛,和 n n n 个独立的篱笆,每个篱笆里可以圈养一些奶牛。出于一种奇♂️怪的偏好,Farmer John 把篱笆排成了一排。第 i i i 个篱笆圈养的奶牛数量为 a i a_i ai,显然我们有 ∑ i = 1 n a i = s \sum_{i=1}^n a_i=s ∑i=1nai=s。而且,处于 Farmer John 的癖好,他要求对于每个 i i i 都有 a i > 0 a_i>0 ai>0。
Bessie 认为一个农场是“幸运的”当且仅当你可以找到一个区间 [ l , r ] [l,r] [l,r],使得 ∑ i = l r a i = k \sum_{i=l}^ra_i=k ∑i=lrai=k。
而得寸进尺的 Bessie 认为一个农场是“牛逼的”当且仅当不管 Farmer John 怎么安置他的奶牛,该农场都是“幸运的”。
现在有 t ( 1 ≤ t ≤ 1 0 5 ) t\,(1\le t\le 10^5) t(1≤t≤105) 组询问,每组询问给出 s , n s, n s,n 和 k ( 1 ≤ s , n , k ≤ 10 18 , n ≤ s ) k\,(1\le s,n,k\le {10}^{18},\,n\le s) k(1≤s,n,k≤1018,n≤s),询问这个农场是不是“牛逼的”。
题解:CF1594F
思路:反着考虑,判断是否存在分割方案使得任意区间和不等于 k k k 。
如果存在这样的分割序列 a 1 , a 2 ⋯ a n a_1,a_2\cdots a_n a1,a2⋯an ,搞一下前缀和 0 , s 1 , s 2 ⋯ s n ( 0 < s 1 < s 2 < ⋯ s n = s ) 0,s_1,s_2\cdots s_n(0<s_1<s_2<\cdots s_n=s) 0,s1,s2⋯sn(0<s1<s2<⋯sn=s) ,则必然满足任意两个数之差不为 k k k ,等价于在 0 ∼ s 0\sim s 0∼s 中选择 n + 1 n+1 n+1 个数字使得不存在任意两数之差为 k k k 。这个问题可以求一下最大的可选择数量(同余系下交替选择),判一下和 n + 1 n+1 n+1 的大小即可。
AC代码:https://codeforces.com/contest/1594/submission/178064575