國慶DAY1訓練

2021-08-28 15:18:47 字數 3316 閱讀 5777

j 模擬

題意:移動數字

記錄一下每個數字的位置 然後如果和0的距離為1 則交換

#include

using namespace std;

struct node

p[1020000];

//pos

intcal

(int x,

int y)

int a[

1020000];

intmain()

}while

(m--)}

for(

int i =

0; i <= n * n -

1; i++

)for

(int i =

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

return0;

}

a

題意:find such a x

let a^x + b ^ x = 0 mod p ^k

p is prime and odd

conclusion:

if exist t

a^t + b ^ t = 0 mod p ^ k

a^ pt + b ^ pt = 0 mod p^(k+1)

prove:

let c = a^t:

b^t = (p ^ k )* d - a ^ t

c^p + ( (p ^ k ) * d - c) ^ p

後面那個二項式展開 然後化簡一下你會發現可以整除p^(k+1) 的

所以就可以遞推了

first

find such a x which

a^x + b ^x = 0 mod p

we can search x of (1~p-1) ( it』s a brute force) to find whether it is true

if doesn』t exist :

ans=-1

else 遞推到k次

why not to find more

because we know that a^(p-1) = 1 mod p

so it is enough to find 1~p-1

#include

using namespace std;

#define ll long long

ll a,b,p,k;

ll ppow

(ll a,ll n)

return ret;

}int

main()

temp = temp * a % p;

temp1 = temp1 * b % p;}if

(ans==0)

else

}return0;

}

c

期望題先求出兩個圓相交的概率

設r>=r

固定r 的 位置 分類討論一下r中軸的位置 根據面積公式求一下面積比 算出概率

最後得出期望即可

n個點可以先sort一下

兩兩求一下概率

#include

using namespace std;

double r[

302000];

intmain()

sort

(r+1

,r+1

+n);

double ans =0;

double sum =0;

for(

int i =

1; i <= n ; i++

)printf

("%.10lf\n"

,ans*2)

;return0;

}

h

曼哈頓最小生成樹

優化可以對每個點求8個象限

求最大邊

板子題 板子是求第k條邊

#include

using namespace std;

const

int maxn =

1000001

;const

int inf =

0x3f3f3f3f

;struct pointp[maxn]

;bool cmp

(point a, point b)

struct bit

}bit[maxn]

;struct edgeedge[maxn<<2]

;bool cmpedge

(edge a, edge b)

int tot;

int n;

int f[maxn]

;int

find

(int x)

void

addedge

(int u,

int v,

int d)

intlowbit

(int x)

void

update

(int i,

int val,

int pos)

i -=lowbit

(i);}}

intask

(int i,

int m)

i +=lowbit

(i);

}return pos;

}int

dist

(point a, point b)

void

manhattan_mst

(int n,point p)

}else

if(dir==2)

}sort

(p,p+n,cmp)

;for

(int i=

0;i++i)

sort

(b,b+n)

;int m =

unique

(b,b+n)

-b;for

(int i=

1;i<=m;

++i)

for(

int i=n-

1;i>=0;

--i)

update

(pos,p[i]

.x+p[i]

.y,i);}

}}intsolve

(int k)

}return0;

}int

main()

cout<<

solve

(n-1

)<}return0;

}

國慶集訓Day1

題意 有 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 做法 就是個一簡單的質...

暑期訓練 day1

暑期訓練 day1 趙景樂今天主要通過 演算法競賽 一書學習了位運算,遞推遞迴,收穫還不小,一是通過位運算了解了一些之前不了解的知識與演算法,二是通過書上的一道hamilton演算法題目又複習了一遍dp。在今天的兩個小時比賽中我因為讀題不准得了4個罰時,又因為陣列定義在主函式裡面浪費了不少的時間和3...

國慶長樂醬油之旅day1

2018 10 01 19 51 01成功a掉 評價 普及 提高 思路 首先很容易想到如何判斷兩條線有交點 就是在所給的字串中找到兩個一樣的點 然後在這兩個點之間搜尋 記錄兩點之間所有點出現的次數,判斷是否為偶數即可 然而這是片面的 我們需要找兩個一樣的點也是有限制的,我們要處理一下。同時我們在記錄...