【10.27】【VP】Codeforces Round #747 (Div. 2)

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 这件事情:

  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 aiaj=0

  2. 如果 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 aiaj=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 aiaj=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(1t105) 组询问,每组询问给出 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(1s,n,k1018,ns),询问这个农场是不是“牛逼的”。

题解:CF1594F

思路:反着考虑,判断是否存在分割方案使得任意区间和不等于 k k k

如果存在这样的分割序列 a 1 , a 2 ⋯ a n a_1,a_2\cdots a_n a1,a2an ,搞一下前缀和 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,s2sn(0<s1<s2<sn=s) ,则必然满足任意两个数之差不为 k k k ,等价于在 0 ∼ s 0\sim s 0s 中选择 n + 1 n+1 n+1 个数字使得不存在任意两数之差为 k k k 。这个问题可以求一下最大的可选择数量(同余系下交替选择),判一下和 n + 1 n+1 n+1 的大小即可。

AC代码:https://codeforces.com/contest/1594/submission/178064575

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值