histcat

histcat

清北學堂 2023 年 7 月 23 日知識總結

上午 基礎算法#

搜索#

簡介#

DFS BFS 迭代加深 雙向搜索 A*

例題:k 短路問題#

todo

分治#

例題:平面最近點對#

todo

貪心#

例題#

1.[AHOI2018 初中組] 分組#

排序後從前到後考慮每一個數 $i$ 應該放到哪裡,怎麼放

2. 刪數問題#

反向考慮。依次確定答案的第 $i$ 位可以填什麼數字,能填什麼數字

3.[NOIP2012 提高組] 國王遊戲#

假設前方已經排好了 $S$ 個人,再去考慮下面的兩個人怎麼排,拓展到所有人 。

下午 模擬賽#

T1 美麗的序列#

題面#

給出一個長度為 $n$ 的序列 $a$ 和一個正整數 $k$。

小 A 認為一個長度為 $m$ 序列 $a$ 是美麗的,當且僅當這個序列所有相鄰的兩數之和是 $k$ 的倍數,即對於所有的 $i\in [1,m)$,需要滿足 $k\ |\ (a_i+a_{i+1})$。

小 A 有一個長度為 $n$ 的序列 $a$,他想刪去儘量少的數使得剩下的序列變得美麗。

你需要幫他計算這個最小需要刪除的數的個數。

思考點#

反向考慮,可以留多少。從結論入手,推出結論的性質

过程#

首先,容易想到可以先給每一個輸入的數模上 k,不會對結果造成影響。

然後考慮結果的性質,若第一個數為 $x$,則第二個數必須為 $k-x$,第三個數必須為 $x$,依此類推。

於是,我們掃描模完的數組,依次考慮每一個數(數本身)$i$,這一個數的前一個數必須為 $k-i$。由於結果求長度,所以我們用一個 map$f [x]$(值域太大)來存下掃描到的數之前的結尾為 $k-x$ 的滿足結果性質的(統計起來說人話就是 $i$ 能放在這個後面的),子序列的長度。這樣,對於 $i$,它的上一位為 $k - i$,所以 $f [i] = f [k - i] + 1$,同時順便看是否可以更新答案 ans

代碼如下

#include<bits/stdc++.h>

using namespace std;

map<int, int> a;
int q[100010];


int main()
{
	int ans = 0;
	int n, k;
	cin >> n >> k;

	for(int i = 1;i <= n;i++)
	{
		cin >> q[i];
		q[i] %= k;
		ans = max(ans, ad = a[(k - q[i]) % k] + 1);
	}

	cout << n - ans;
	return 0;
}

T2 簡單的數學題#

題面#

小 B 很喜歡數學,有一天,小 B 的一個朋友告訴了他兩個數 $n,p$,並問他有多少對 $(i,j)$ 滿足 $1≤i,j≤n$ 且 $i modj≤p$。

小 B 一下子就秒了,於是想問你會不會這個題。

思考點#

不开 longlong 见祖宗,數論分塊(todo)

过程#

todo

T3 奇怪的棧#

題面#

小 C 有一個奇怪的棧,裡面放了 $n$ 個元素,每個元素有三個屬性 $a_i,b_i,c_i$。

每次小 C 會從這個棧頂的第一個元素和第三個元素中挑選一個拿出來,除了第一次拿,小 C 會保證每次拿出來的元素和上一次拿出來的元素的 $a_i$ 和 $b_i$ 會至少有一個相同。

小 C 想知道,他如何拿取元素能使得拿出來的元素的 $c_i$ 之和最大。

思考點#

todo

过程#

TODO

T4 有魔力的字符串#

題面#

小 B 有一個長為 $n$ 的字符串 $S$。

小 B 認為,對於這個字符串 $S$ 的某個子串來說,這個子串是有 “魔力” 的,當且僅當:

  • 在該子串中出現過的字符的出現次數都相同。

小 B 想知道,串 $S$ 有多少子串是有 “魔力” 的。

本題字符串的子串定義為,該字符串某一連續段。

思考點#

todo

过程#

todo

#

兩份課件,一份作業

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。