bzoj4767兩雙手 容斥 組合

2022-05-07 10:12:11 字數 2015 閱讀 8155

4767: 兩雙手time limit: 10 sec  memory limit: 256 mb

submit: 684  solved: 208

[submit][status][discuss] description

老w是個棋藝高超的棋手,他最喜歡的棋子是馬,更具體地,他更加喜歡馬所行走的方式。老w下棋時覺得無聊,便

決定加強馬所行走的方式,更具體地,他有兩雙手,其中一雙手能讓馬從(u,v)移動到(u+ax,v+ay)而另一雙手能讓

馬從(u,v)移動到(u+bx,v+by)。小w看見老w的下棋方式,覺得非常有趣,他開始思考乙個問題:假設棋盤是個無限

大的二維平面,一開始馬在原點(0,0)上,若用老w的兩種方式進行移動,他有多少種不同的移動方法到達點(ex,ey

)呢?兩種移動方法不同當且僅當移動步數不同或某一步所到達的點不同。老w聽了這個問題,覺得還不夠有趣,他

在平面上又設立了n個禁止點,表示馬不能走到這些點上,現在他們想知道,這種情況下馬有多少種不同的移動方

法呢?答案數可能很大,你只要告訴他們答案模(10^9+7)的值就行。

input

第一行三個整數ex,ey,n分別表示馬的目標點座標與禁止點數目。

第二行四個整數ax,ay,bx,by分別表示兩種單步移動的方法,保證ax*by-ay*bx≠0

接下來n行每行兩個整數sxi,syi,表示乙個禁止點。

|ax|,|ay|,|bx|,|by| <= 500, 0 <= n,ex,ey <= 500

output

僅一行乙個整數,表示所求的答案。

sample input

4 4 1

0 1 1 0

2 3

sample output

40 組合+容斥

可以發現兩種方法走的步數是一定的

因為 ax*x+bx*y=ex ay*x+by*y=ey唯一解

特判能不能走到此點,並且把座標化成二元一次方程組的解(x,y)

那麼ans=總方案-路上經過禁止點的方案

算路徑方案用組合數

(0,0)一次向上或右走一單位,走到(n,m)的方案為c(n+m,m)

再考慮路上經過禁止點的方案

對於每個禁止點,可以算出到達它的方案,再用容斥減去之前已經經過禁止點的方案

對於禁止點i,如果禁止點j可以到達i,那麼到達i的方案要減去到達j再到i的方案

由於座標化簡後相當於只向右上走,所以按座標排序,只有排在它之前的點可能到達它

/*

**wa了沒調出來。

*/#include

#include

#include

#include

#define ll long long

#define n 505

#define mod 1000000007

using

namespace

std;

int ex,ey,ax,ay,bx,by,cnt,n,m,num,fac[1005*1005

],f[n];

struct nodep[n];

bool check(int x,int y,int &a,int &b)

void

pre()

int quick(int a,int

b)

returnc;}

int c(int x,int

y)int calc(int x,int

y)bool cmp(node a,node b)

intmain()

for(int i=1;i<=num;i++)

pre();

p[++cnt].x=n;p[cnt].y=m;

sort(p+1,p+1+cnt,cmp);

for(int i=1;i<=cnt;i++)

f[cnt]

<0?f[cnt]+=mod:1

; cout

}

BZOJ 4767 兩雙手(容斥 DP)

4767.兩雙手 題目位址 3782.上學路線 題目位址 一道很像的題。將兩個行走方式看做兩個二維向量 vec,vec 令其為該向量空間的基,對該空間變換後,得到每個禁止點的新座標和終點的新座標。可以發現從乙個點 u u 1,u 2 走到另外乙個點 v v 1,v 2 的行走步數是唯一的 由於基向量...

省選專練之容斥 BZOJ4767 兩雙手

老w是個棋藝高超的棋手,他最喜歡的棋子是馬,更具體地,他更加喜歡馬所行走的方式。老w下棋時覺得無聊,便決定加強馬所行走的方式,更具體地,他有兩雙手,其中一雙手能讓馬從 u,v 移動到 u ax,v ay 而另一雙手能讓馬從 u,v 移動到 u bx,v by 小w看見老w的下棋方式,覺得非常有趣,他...

BZOJ 4767 兩雙手(組合數學 Dp)

description 老w是個棋藝高超的棋手,他最喜歡的棋子是馬,更具體地,他更加喜歡馬所行走的方式。老w下棋時覺得無聊,便 決定加強馬所行走的方式,更具體地,他有兩雙手,其中一雙手能讓馬從 u,v 移動到 u ax,v ay 而另一雙手能讓 馬從 u,v 移動到 u bx,v by 小w看見老w...