參考部落格
注意的幾個點:
#include
using
namespace std;
typedef
long
long ll;
//typedef __int128 lll;
#define print(i) cout << "debug: " << i << endl
#define close() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define mem(a, b) memset(a, b, sizeof(a))
const ll mod =
1e9+7;
const
int maxn =
2e5+10;
const
int inf =
0x3f3f3f3f
;vector<
int> g[maxn]
;int dep[maxn]
, st[maxn]
, ed[maxn]
, anc[maxn][20
], nodeof[maxn]
;int ans[maxn]
;int n, tim;
struct node
t[maxn <<2]
;void
init()
void
dfs(
int u,
int fa)
intfindfa
(int u,
int len)
void
pushup
(int tar)
//更新本子樹的最深的點
void
build
(int l,
int r,
int tar)
int mid = l + r >>1;
build
(l, mid, tar <<1)
,build
(mid +
1, r, tar <<1|
1);pushup
(tar);}
void
update
(int l,
int r,
int tar,
int val)
int mid = t[tar]
.l + t[tar]
.r >>1;
if(l <= mid)
update
(l, r, tar <<
1, val);if
(r > mid)
update
(l, r, tar <<1|
1, val)
;pushup
(tar);}
intmain()
dep[0]
=-1;
dfs(1,
0);build(1
, tim,1)
;mem
(ans, inf)
;update
(st[1]
, ed[1]
,1,1
);for(
int i = n -
1; i >=
0; i--
) ans[cost]
= i;
for(
int it : buf)
update
(st[it]
, ed[it],1
,0);
}for
(int i =
2; i <= n; i++
) ans[i]
=min
(ans[i]
, ans[i -1]
);ll sum =0;
for(
int i =
1; i <= n; i++
) sum +
= ans[i]
; cout << sum << endl;
}}
先找出每個數的最大質因數,將最大質因數相同的放在乙個集合中,從後往前遍歷每乙個集合,如果該集合大小》=2並且大小為偶數,則可以兩兩配對,若為奇數,設該質因數為p,將2p放入質因數為2對應的集合中。
#include
using
namespace std;
typedef
long
long ll;
//typedef __int128 lll;
#define print(i) cout << "debug: " << i << endl
#define close() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define mem(a, b) memset(a, b, sizeof(a))
const ll mod =
1e9+7;
const
int maxn =
2e5+10;
const
int inf =
0x3f3f3f3f
;int maxp[maxn]
, vis[maxn]
, p[maxn]
;int cnt;
vector<
int> v[maxn]
;vectorint,
int>
> res;
void
init()
}int
main()
for(
int j =
1; j < v[p[i]].
size()
; j +=2
) res.
push_back
(make_pair
(v[p[i]
][j -1]
, v[p[i]
][j]))
;}for(
int j =
1; j < v[2]
.size()
; j +=2
) res.
push_back
(make_pair
(v[2
][j -1]
, v[2]
[j]));
cout << res.
size()
<< endl;
for(
int i =
0; i < res.
size()
; i++
)printf
("%d %d\n"
, res[i]
.first, res[i]
.second);}
}
2020牛客暑期多校訓練營(第四場)
傳送門 打表發現 f n,c c n可以分解為多少個質因數 用尤拉篩打出可以分解為多少個質因數 includeusing namespace std typedef long long ll const ll inf 0x3f3f3f3f3f3f3f3f const double pi acos 1...
2020牛客暑期多校訓練營 第四場
開始堇業,把之前欠的債補上。這場只出了兩個水題。題目看起來太複雜了。仔細分析以後其實是除掉最小質因數之後的那個數的次數 1。一開始質因數從1列舉哇了一發。我是弱智。include using namespace std typedef long long ll const int mod 1e9 7...
牛客暑期多校訓練營B Boundary
給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...