a - cat題解:先打出異或字首和的表,不難發現當在偶數字置pos時,[pos,pos+3]這些數的異或和為0,這意味著中間的序列可以每四個四個的連一起,因為他們異或和的值為0,因此我們就可列舉開頭和結尾的位置,並維護最大長度。
**實現:
c - <3 numbers#include#define ll long long
using namespace std;
ll check(ll l,ll r)
else
}int main()
}printf("%lld\n",ans==0?-1:ans);
}return 0;
}
題解:如果對質數密度不是很熟悉,那麼這道題就不是一道很好想的簽到題。
首先我們可以打乙個質數分布的表,然後根據質數分布定理( π(x)=x/ln(x) )。
我們可以推出當區間長度大於60的時候,所有區間的質數密度都滿足條件,直接輸出yes。
否則的話再在小區間裡面進行暴力列舉就行了。
**實現:
m - kill the tree#pragma gcc optimize(2)
#include#include#include#include#include#include#include#include#include#include#include#define pi atan(1.0)*4
#define e 2.718281828
#define rp(i,s,t) for (register int i = (s); i <= (t); i++)
#define rp(i,t,s) for (register int i = (t); i >= (s); i--)
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset(a,b,sizeof(a))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pii pair#define mp make_pair
#define pb push_back
#define debug printf("ac\n");
using namespace std;
inline int read()
while(c>='0'&&c<='9')
return a*b;
}const int inf = 0x3f3f3f3f;
const int n = 1e5+7;
bool visited[n];
int prime[n],tot;
void init()
bool find(int x)
else if (f.count(i * i * i + j * j * j - x))
return false;
}int main()
return 0;
}
題解:一道很不多的樹形dp題,考察了樹的重心的幾條特別重要的性質:
1.一顆樹的重心最多有兩個
2.一顆樹的重心到其他點的距離和最小,如果有兩個重心,那麼兩個重心的距離和 相等。
3.當兩個子樹合併時,新的樹的重心在連線這兩個子樹重心的鏈上。
因此根據這幾個性質,我們可以求出兩個重心連線的鏈,然後沿著這鏈往上走,能往上走的前提是距離和可以繼續減少,這樣保證當前點不是重心,直到走到那個深度比較大的重心,如果這個重心的距離和等於其父親的距離和,那麼他父親就也是重心。
**實現:
#pragma gcc optimize(2)
#include#include#include#include#include#include#include#include#include#include#include#define pi atan(1.0)*4
#define e 2.718281828
#define rp(i,s,t) for (register int i = (s); i <= (t); i++)
#define rp(i,t,s) for (register int i = (t); i >= (s); i--)
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset(a,b,sizeof(a))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pii pair#define mp make_pair
#define pb push_back
#define debug printf("ac\n");
using namespace std;
inline int read()
while(c>='0'&&c<='9')
return a*b;
}const int inf = 0x3f3f3f3f;
const int n = 2e5+7;
int n,m;
struct edgee[n*2];
int tot;
int head[n*2];
vectorh[n];
int p[n],sz[n],deep[n],son[n];
void addedge(int u,int v)
void update(int rt,int x,int y)
void dfs(int u,int fa)
}int main()
deep[1]=1;
dfs(1,0);
rp(i,1,n)
return 0;}/*
61 2
1 51 3
2 42 6
*/
2019ICPC徐州網路賽
theme n個數編號為1 n,兩種操作 1 x 將編號為x的數置為不可得,2 x 詢問x位置及其後第乙個可得數的編號。1 n,x 1e9,1 q 1e6 solution 首先想到用線段樹維護。初始時線段樹每個l r位置的值為l,1 x操作對應將x位置值置為inf,2 x 操作相當於查詢區間 x,...
2019 ICPC徐州 A Cat題解
題目大意 從1到正無窮的排列。t次詢問,每次給乙個l,r,s 每次在 l,r 選擇乙個最長的區間,使它的異或小於等於s.t 5e5 l,r 都是1e18 s 1e18 資料範圍這麼大一定是規律題 打表發現異或後為0的區間是長度為4而且迴圈的,這樣子的長度為4的區間的開始位置應該模4等於2或者0,這樣...
2019 ICPC 女生專場重現賽 B題
problem description wls 有乙個整數 n 他想將 1 n 這 n 個數字分成兩組,每一組至少有乙個數,並且使得兩組數字的和的最大公約數最大,請輸出最大的最大公約數。input 輸入一行乙個整數 n 2 n 1,000,000,000 output 輸出一行乙個整數表示答案。sa...