對有限集合\(a\),存在函式\(f:n→a\)具有下述性質:若\(|i-j|\)是素數,則\(f(i)≠f(j),n=\\).求有限集合a的元素的最少個數.
【引理】\(\forall p\ge 2\),若\(p\)為質數,則\(p=4n+1\)或\(p=4n+3,n\in \mathbb n\)
證明:①所有大於2的素數都是奇數
②\(4n+1,4n+3\)表示了所有的奇數
【證明】
\(1,3,6,8\)中每兩個數的差為素數,所以\(f(1),f(3),f(5),f(8)\)互不相同,\(|a|≥4\).
另一方面,令\(a=\\).對每一自然數\(n\),令\(f(n)=n\operatorname 4\),則在\(f(i)=f(j)\)時,\(|i-j|\)被4整除.所以不被4整除時,\(f(i)\neq f(j)\),因而\(|i-j|\)是質數。
因而\(f\)是滿足條件的函式,a的元素個數最少為4.
#include #include #include #include #include #include using namespace std;
long long read()
while(c>='0'&&c<='9')
return a*op;
}int n, ans = 0x3f3f3f3f, now, col[10], ans_col[10];
int main()
else
return 0;
}
對於給定的長\(m\)的序列\(a\),求乙個長度為\(m\)的序列\(b\),滿足以下性質:
①\(\forall i\in[1,m],b_i\in[0,n]∩\mathbb z\)②\(\sum\limits_^ma_ib_i\le d\)
在滿足以上條件的情況下,求\(\left( \sum\limits_^mb_i+k\min_^mb_i\right)_\)
\(t\)組資料.
首先有貪心:\(a_i\le a_j\)則\(b_i\ge b_j\),將\(a\)排序,列舉有多少個\(b\)達到了上界\(n\)。若有\(s\)個達到了上界。我們設\(b_=x\),則答案為:
\[ni+x+\left\lfloor \dfrac^sa_i-a_x}^na_i}\right\rfloor(k+m-i-1)
\]後面是形如\(x+a\left\lfloor \dfrac\right\rfloor(a\ge 0)\)的形式,這個函式形如鋸齒狀,有三種可能達到最大值。
(1)開始的第乙個峰值
m
/|/ | /|
|/ | /
|/
(2)結束的最後乙個峰值
m
/|/| / |/
/| / |/
/ |/
(3)結束點
m
//| /
/| / |/
/ |/
放在題中就是
盡可能提高\(\min b_i\),零頭去提高\(b_s\)
盡可能提高\(b_s\),零頭去提高\(\min b_i\)(雖然零頭顯然不足以提高)
讓\(\min b_i\)增加1,剩下全部去提高\(b_s\)
時間複雜度\(o(tn\log n)\)
#include using namespace std;
const int maxn = 200005;
int t, m;
long long k, n, ans, sum, d, a[maxn];
int main()
if (i != m)
sum -= a[i];
d -= a[i] * n;
} printf("%lld\n", ans);
} return 0;
}
你有一棵\(n\)節點的樹 ,回答\(m\)個詢問,每次詢問給你兩個整數\(l,r\),問存在多少個整數\(k\)使得從\(l\)沿著\(l\rightarrow r\)的簡單路徑走\(k\)步恰好到達\(k\)
考慮將鏈拆分為\(a\)到\(\operatorname(a,b)\)與\(\operatorname(a,b)\)到\(b\)。記\(\operatorname(x)\)表示\(x\)的深度。
\(a\)到\(\operatorname(a,b)\)上的答案就是\(\operatorname(x)-\operatorname(a)=x\)的\(x\)個數,也就是說\(\operatorname(x)-x=\operatorname(a)\)的\(x\)個數,另一段類似,先討論一段。
注意到前面的這是個常數,令\(b_x=\operatorname(x)-x\),所以就是查鏈上有多少個點\(x\)滿足\(b_x\)為常數\(\operatorname(a)\),這個查分一下,可以變成查詢點到根路徑上有多少個點滿足\(b_x\)為常數。
離線做乙個樹上字首和,維護乙個陣列,表示每個\(b_x\)的出現次數,然後\(\text\),\(\text\)到\(x\)時將\(b_x\)插入到這個陣列中,\(\text\)出\(x\)的時候,將\(b_x\)刪去,\(\text\)到乙個點的時候處理所有被離線到這個點的詢問即可。總時間複雜度\(o(n+m)\)。
對於乙個長為01序列,初始都為1.先有\(m\)條指令,第\(i\)條指令是一對數\((x_i,y_i)\),你可以選擇:
記錄該條指令為1,表示將\(y_i\)變為0,\(x_i\)變為1
記錄該條指令為0,表示將\(x_i\)變為0,\(y_i\)變為1
輸出乙個長為\(m\)的01串,第\(i\)個數(0或1)表示第\(i\)條指令的情況,並使得最終仍有不小於\(\left\lfloor \dfrac\right\rfloor\)個數為1.
看到\(\left\lfloor \dfrac\right\rfloor\)容易想到兩兩分組。剛開始我們令\((1,2)\)一組,\((3,4)\)一組,如果最後乙個數是奇數則\(n\)單獨一組。一組\((x,y)\)表示經過前若干個操作後可以在\(x\)或\(y\)中,組與組之間互不影響。
經過乙個導線\((x,y)\)後,如果之前分組\((x),(y,z)\)合併則調整為\((x,y),(z)\),如果是\((x,u),(y,v)\)則調整為\((x,y),(u,v)\)。考慮所有情況容易發現這樣不會出錯。構造只需要反推。複雜度\(o(n+m)\)。
20201017 模擬賽總結
題目pdf,提取碼q2xb。原題 洛谷 p4198 時間複雜度 mathcal o n log 2 n include include include includeusing namespace std const int n 1e5 struct seg t n 4 10 define ls p...
2020 10 17 NOIP提高A組 模擬
t2 首先算出期望走ans步能暴擊一次,那麼答案就是1 ans。這是因為題目中可視為走了無限步之後的期望暴擊次數。然後ans的計算還是很容易的,可以列舉i,算出第i步還沒有暴擊或者剛好在第i步暴擊的概率,這樣都可以計算ans。t4 這題比較巧妙。如果不存在乙個k k的合法正方形,那麼先手必敗。否則如...
2020 10 17 NOIP提高A組 模擬 總結
這就是沒看資料範圍不開 longlong 以及最後暴力都不調樣例還有的結果 死的透紅透紅的 考場 0 100 0 0 100 估分 24 100 30 1 155 16 一開始,sg 函式?昨天剛搞過!然後,到死也推不出來,打完暴力也找不到規律。我 正解打出來了,但發現自己的打法似乎比別人的要複雜許...