2020牛客暑期多校訓練營(第九場)

2021-10-09 05:48:30 字數 2664 閱讀 7349

總結:

這一場過了a題,之前用c++各種寫,但是沒想到用py三行**就解決了問題,還是需要學習很多很多。fi

一級目錄

土撥鼠在第1個宿舍,橙子在第n個宿舍。這n個宿舍間有n-1條路並且長度都為1,土撥鼠從第1個房間去第n個宿舍,速度為1m/s;橙子從第n個宿舍追趕土撥鼠,速度為2m/s。。

二分時間 t ,然後判斷在 ts 內土撥鼠是否會被橙子追上。以橙子所在的寢室 n 為根建樹,從 1 到 n 列舉所有土撥鼠能夠到達的點,先找出t秒能走到哪個點,然後再找這個點能走到的離n最遠的點,判斷在走的過程中會不會被追上。

#include.h>

using namespace std;

const int maxn =

1e5+10;

vector vv[maxn]

;int vis[maxn]

;int f[maxn]

;int dep[maxn]

;void

dfs(int x,int fa,int de)

}int ans =0;

void

dfs2

(int x,int fa,int de)

}int main()

vis[1]

=1;dfs

(n,0,1

);int k =-1

; int s = dep[1]

- m;

for(int i =

1; i <= n; i ++)}

int num = dep[k]-1

;dfs2

(k,f[k],1

);ans --

; num += ans;

int r =

(num +1)

/2; int l =0;

while

(l < r)

printf

("%d\n"

,l);

}

土撥鼠要和蘋果約會,第 i 天它的第 j 件衣服的邋遢度為 aij ,它要在n天中選擇m天和蘋果約會,要求選出的m天衣服的邋遢度的最大值和最小值的差值最小。

因為要最小化最大值和最小值的差值,所以用pair存每件衣服的邋遢度和第幾天,然後對邋遢度從小到大排序。那麼問題就轉換成了求乙個區間 [l,r] ,使得這個區間覆蓋m個不同的天,並且r的邋遢度-l的邋遢度最小。這個問題就可以用尺取解決了。對於每乙個l,求出最小的合法的r,每次更新差值最小值即可。

#include.h>

#define st first

#define sd second

#define ll long long

#define pii pair

using namespace std;

const int inf =

0x3f3f3f3f

;const int maxn =

2e6+10;

pii pp[maxn]

;int vis[maxn]

;int main()

}sort

(pp +

1, pp +

1+ cnt)

; int num =0;

int l =

1, r =1;

int minn = pp[1]

.st, maxx =0;

int ans = inf;

while(1

)if(num < m)

break

; ans =

min(ans, maxx - minn)

; vis[pp[l]

.sd]--;

if(vis[pp[l]

.sd]==0

) num --

; minn = pp[l +1]

.sd;

l ++;}

printf

("%d\n"

,ans)

;}

給出n個數(0<=a[i]<=9),由這n個數組成2個數,使得這兩個數的乘積最小。

自己造幾個例子就可以看出,選擇0之外最小的數和剩下的數字組成的沒有前導0的數相乘結果最小。剩下的數字怎樣最小呢,當然是找到最小的非零的數做第一位,後邊接上所有的0,再按照有小到大的順序放剩下的數字。因為n的範圍在1e5,所以要用高精度乘法。

#include.h>

#define ll long long

using namespace std;

int a[

100100];

int main()

for(int i=

0;i<

10;i++

) ans.

push_back(0

);for(int i=

0;isize()

;i++)}

while

(!ans.

back()

) ans.

pop_back()

;for

(int i=ans.

size()

-1;i>=

0;i--

) cout<; cout<}return0;

}

2019牛客暑期多校訓練營(第九場)

d knapsack cryptosystem 折半搜尋,晚上又去看了挑戰程式設計,對於時間複雜度高的情況,可以通過犧牲空間來降低時間複雜度。先把前半部分所有可以組合的情況列舉出來,然後對於後半部分依次列舉,那麼複雜度變化為o 2 36 o 2 18 2 18log 18 顯然就可做了,折半的裸題。...

2019牛客暑期多校訓練營(第九場)

給定 p 1000000007 有兩個數x,y,其中 x leqslant y leqslant p x y equiv b mod p x times y equiv c mod p 求 x,y的值 二次剩餘 1 二次剩餘參考資料1 2 二次剩餘參考資料2 知道 x y 和 x times y 那...

牛客網暑期ACM多校訓練營(第九場)

做法 看到下標 xor 這種情況就想 fwt 可是半天沒思路,於是放棄了。其實這個 n 瘋狂暗示啊。設未知數向量為 x 列一下方程組就可以發現有 b k sum a i x j 做法就顯然了吧,把 a 和 b 分別 fwt 對應相除然後反變換即可。表示前天才學的 fwt 就不會使了。include ...