國慶集訓Day1

2022-08-21 21:00:18 字數 2540 閱讀 8865

題意:

有\(n\)個數 \(a_1, a_2,..., a_n\) 有m個數\(b_1, b_2,..., b_n\)

令\(a = a_1\times a_2\,\times ... \times \,a_n\)

令\(b = b_1\times\,b_2 \times\,...\,\times\,b_n\)

判斷\(a\)是否是\(b\)的倍數

輸入:\(n,m\)

輸出:\(yes / no\)

做法:就是個一簡單的質因數分解

#include#include#includeusing namespace std;

int n, m;

int a[1010], b[1010];

int p[3][20]={};

void divid(int op, int x)

return;

}int main()

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

for(int i = 1; i <= 3; i++) }

printf("yes\n");

return 0;}/*

樣例:輸入:2 3

6 61 3 4

輸出:yes

*/

題意:

現在要生成一張n個點的有向圖。要求滿足:

1.若有\(a-> b\)的邊,則有\(b->a\)的邊

2.若有\(a->b\)的邊和\(b->c\)的邊,則有\(a->c\)的邊

3.至少有乙個點沒有自環

求方案數。 由於結果可能較大,結果對\(m\)取模

輸入:\(n,m\)

輸出:答案

做法:這道題除了題意比較坑以外,沒有什麼太大的難點。需要注意的是,按照題意,如果乙個點所在的連通塊大小大於或等於2,則該點一定有自環。

我的做法是:設\(f[i][0]\)表示\(i\)個點自由組合,且每個點都存在自環的方案數

​ \(f[i][1]\)表示\(i\)個點自由組合,且至少有\(1\)個點沒有自環的方案數

我轉移方程的方法有點獨特,我是看\(1\)號點所在的連通塊的點的個數進行轉移,需要注意的是轉移是需要討論\(1\)號點是否孤立為乙個點,若孤立,則有\(1\)號點自環和不自環的兩種情況,需分別進行討論,狀態轉移方程如下:

\(f[i][1]+=f[i - 1][1]\,\,\,\,1\)號點孤立且\(1\)號點存在自環

\(f[i][1] += f[i - 1][1] + f[i - 1][0]\,\,\,\,1\)號點孤立且\(1\)號點不存在自環,則其他點可以自環,可以不自環

\(f[i][1] +=\sum_^ f[i - j][1]\times c_^ \,\,\,\,\)計算\(1\)號點所在的連通塊大小為\(j\)時的方案數

\(f[i][0]+=f[i-1][0]\,\,\,\,1\)號點孤立時只能自環

\(f[i][0]+=\sum_^ f[i - j][0]\times c_^ \,\,\,\,\)計算\(1\)號點所在的連通塊大小為\(j\)時的方案數

組合數用楊輝三角就可以了。

老師講的做法是把「第\(1\)個點」改成「第\(i\)個點」,其實寫法是一樣的,只是思路不同而已。

#include #include #include using namespace std;

#define maxn 2010

#define ll long long

int n, mol;

ll f[maxn][2];// 1:符合題意 0:不符合題意

ll c[maxn][maxn];

int main()

}/* for(int i = 0; i <= n; i++) */

f[1][1] = 1; f[1][0] = 1;

for(int i = 2; i <= n; i++)

f[i][0] = (f[i][0] + 1) % mol;

}// for(int i = 1; i <= n; i++)

// printf("f[%d][0] = %lld f[%d][1] = %lld\n", i, f[i][0], i, f[i][1]);

printf("%lld\n", f[n][1]);

return 0;

}

/*樣例:

輸入:2 5

輸出:3

*/

題意:

\(a=1\,\,\,b=0\)

進行不超過b次操作,每次可以選擇一下兩種操作之一:

\(1.\,\,b\,\,+=1\)

\(2.\,a\times b\)

最後得到乙個整數\(a\),該整數字於\([l,r]\)之間,求最後的\(a\)有多少種可能

輸入:\(l,r,p\)

輸出:答案

做法:經過「觀察」,我們發現答案很小,所以我們可以通過計算出所有可能的答案(有質因子超過p則該答案不可能),然後「離散化」就可以求出了,同時再計算需要的最小步數。

牛客國慶集訓派對Day1

a 看樣例過題 include include include include include using namespace std typedef long long ll typedef pairpii const int maxn 1e5 10 vectorg maxn int a 10 i...

2019牛客國慶集訓派對day1

雖然我國慶七天溜回家了,隊友還是督促我好好打比賽.畢竟現場賽也沒幾天了,好好練習哈 判斷矩陣是否存在子矩陣滿足 x 1 le x le x 2,y 1 le y le y 2 內全是1,其他地方為0。水題,暴力判斷一下即可。include includeusing namespace std cha...

國慶DAY1訓練

j 模擬 題意 移動數字 記錄一下每個數字的位置 然後如果和0的距離為1 則交換 include using namespace std struct node p 1020000 pos intcal int x,int y int a 1020000 intmain while m for in...