2019杭電多校第五場補題

2021-09-25 22:06:54 字數 1503 閱讀 4899

1001:fraction

bx≡a(mod p)可以轉換為:bx-kp = a.因為a的範圍是(0,b),則列出不等式

又因為1p

x<=b

k<=p

x−

1\frac<=\frac<=\frac

xp​<=k

b​<=x

−1p​

。據說是乙個經典問題:

給你a,b,c,d,求最簡分式x

y\frac

yx​滿足a

b<=x

y<=c

d\frac<=\frac<=\frac

ba​<=y

x​<=d

c​如果a/b != c/d(此處為整除),那麼x=(a/b)+1,y=1,得到解。否則

設t=(a/b),不等式同時減去t得到:

a −t

bb

<=x

−tyy

<=c

−tdd

\frac<=\frac<=\frac

ba−tb​

<=y

x−ty

​<=d

c−td

​,可化為:

d c−

td

<=y

x−ty

<=b

a−tb

\frac<=\frac<=\frac

c−tdd​

<=x

−tyy

​<=a

−tbb

​化為了另乙個相同的問題

遞迴處理直到得到解,再一步一步解出之前的解。

#include#define ll long long

using namespace std;

void gao(ll a, ll b, ll c, ll d, ll &x, ll &y)

ll t = a/b;

ll x1, y1;

gao(d, c - t*d, b, a-t*b, x1, y1);

y = x1;

x = y1 + t*y;

return;

}int main()

}

1002:three arrays

兩個陣列各建立一棵字典樹,然後查詢的時候從高位到低位,如果可以配出0就優先配出0,否則只能配出1然後遞迴子樹。這樣貪心的得到c陣列之後排序即為答案。

#include#define ll long long

using namespace std;

const int maxn = 1e5 + 50;

struct nodee[maxn*60];

int r1, r2, tot;

void insert(int rt, int x)printf("\n");

}int main()

}

1006:string matching

會擴充套件kmp你就可以秒殺這道題。

2019杭電多校第五場

有兩個題隊友補的,先安利一波 1005 permutation 1 hdu 6628 題意 給你乙個n和k,求n的全排列中,相鄰兩數的差值的陣列字典序第k小的排列 思路 其實就是兩個字,暴力.字典序第k小,k的範圍是n!跟10000取min,8!40320,是第乙個大於10000的數,所以當n小於等...

20190805杭電多校第五場

1004 equation 做法很簡單,寫起來容易混。首先想到去絕對值。因為滿足a 0,顯然當x增大時ax b的值也在增大,所以可以對所有 a,b 按 顯然存在n 1個區間,每個區間都可以將式子分為兩部分,前半部分均為 ax b,後半部分均為ax b。區間依次為 預處理a和b的負的字首和與正的字尾和...

2020杭電多校第五場題解

施工中。已知 a times b times c 的四面體,以 a 為 x 軸,b 為 y 軸,c 為 z 軸 以 z 為軸做切面,為 c times frac 的三角形 則易知 h frac frac frac frac frac o n log n 求 frac 的期望即可 比賽時一發過。inc...