直接說做法了,挺好理解的。
欽定a ≤b
a\le b
a≤b。
設r =x
mod(
a+b)
r=x\mod (a+b)
r=xmod
(a+b
)。分四種情況討論:
r ∈[
0,a−
1]
r\in [0,a-1]
r∈[0,a
−1]。這個情況沒有意義。
r ∈[
a,b−
1]
r\in [a,b-1]
r∈[a,b
−1]。這個情況下,a
aa能多走一步而b
bb不能,所以只要出現了這個情況a
aa必勝。
r ∈[
b,2a
−1
]r\in [b,2a-1]
r∈[b,2
a−1]
。這個情況下,兩個人都能各走一步。所以這個情況相當於改變先後手順序。
r ∈[
2a,a
+b−1
]r\in [2a,a+b-1]
r∈[2a,
a+b−
1]。這個情況下,a
aa能多走至少2
22步,b
bb能多走至少1
11步。如果b
bb先手,相當於有個情況3
33;如果a
aa先手,a
aa必勝。如果這個情況出現了兩次,那麼a
aa無論先手後手都必勝。
可能bb
b和2a
2a2a
的大小關係會有問題,但是沒有太大關係。(按照**中的那樣分類就是了)
答案先乘上2cn
t1
2^2c
nt1。
計算先手必勝和後手必勝的方案:
先手必勝:∑im
od2=
1(cn
t3i)
+∑im
od2=
0(cn
t3i)
cnt4
\sum_ \binom+\sum_\binomcnt4
∑imod2
=1(
icnt
3)+
∑imo
d2=0
(ic
nt3
)cnt
4後手必勝:∑im
od2=
0(cn
t3i)
\sum_ \binom
∑imod2
=0(
icnt
3)(這裡沒有cnt
4cnt4
cnt4
的原因是如果有a
aa必勝)
using
namespace std;
#include
#include
#include
#define n 100010
#define mo 1000000007
#define ll long long
ll qpow
(ll x,ll y=mo-2)
ll fac[n]
,ifac[n]
;ll c
(int m,
int n)
void
initc
(int n)
int n,a,b;
int x[n]
;ll ansa,ansb,ansf,anss;
void
work()
for(
int i=
0;i<=cnt3;
++i)
if(i&1)
(ansf+=c
(cnt3,i))%
=mo;
else
ll tmp=
qpow(2
,cnt1)
;(ansf*
=tmp)
%=mo;
(anss*
=tmp)
%=mo;
ansa=
(qpow(2
,n)-ansf-anss+mo+mo)
%mo;
}int
main()
else
work()
;printf
("%lld %lld %lld %lld\n"
,ansa,ansb,ansf,anss)
;return0;
}
清華2019冬令營模擬12 8 視野
計算幾何弱渣果然就是一點感覺也沒有。首先考慮不刪怎麼做?肯定要把點給離散,那麼現在對於每一小段,要求出是哪條線段最近?按乙個順序掃過去,每一條線段打乙個加入和刪除的標記。由於線段互不相交,所以線段順序不會隨著小段的移動而改變。因此,我們可以用乙個set去維護插入刪除,比較遠近時,就求交,判斷誰近。那...
位元組跳動冬令營2018
給定一棵有根樹,邊有邊權,兩個人輪流操作,每次可以把一條邊的權值減少一,權值變為 0 表示把子樹砍掉,問先手第一輪操作哪些邊使得自己必勝。n 1 06 n leq 10 6 n 10 6之前的部落格,發現這道題本質上是圖的刪邊遊戲。把環縮掉,就變成了樹上刪邊遊戲了。結論是 葉子的 sg 為 0,非葉...
2018北京冬令營測試
題面戳我!我們發現 所有數加起來等於線索上的權值 這個東西可以用流量平衡來解決,所以可以跑上下界費用流。建圖就是,把上下線索放左邊,左右線索放右邊,源點向所有上下線索連乙個上下界均為對應權值的邊,同理左右線索向匯點連乙個上下界均為對應權值的邊 對於空格就是把左邊的乙個節點和右邊的乙個節點連起來,上下...