模板
讚讚 (. ❛ ᴗ ❛.)
基本
#include<bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0),cin.tie(0);
return 0;
}
二分搜
pair<int,int> FIND(vector<int>&arr,int target){
int l = 0;
int r = arr.size()-1;
int m = l + (r-l)/2;
while(l<=r){
m = l + (r-l)/2;
if(arr[m]<target){
l=m+1;
}
if(arr[m]==target){
return {true,m};
}
if(arr[m]>target){
r=m-1;
}
}
return {false,l};
}
int main(){
vector<int> arr(n);
}
前綴和,後綴和
void prefix_sum(vector<int>&arr,vector<int>&prefix){
prefix.resize(arr.size());
for(int i=0;i<arr.size();++i){
if(i==0){
prefix[i] = arr[i];
}else{
prefix[i] = prefix[i-1]+arr[i];
}
}
}
void suffix_sum(vector<int>& arr, vector<int>& suffix) {
suffix.resize(arr.size());
for (int i = arr.size() - 1; i >= 0; --i) {
if (i == arr.size() - 1) {
suffix[i] = arr[i];
} else {
suffix[i] = suffix[i + 1] + arr[i];
}
}
}
int main(){
vector<int> arr(n);
}
圖
void add_edge(vector<vector<pair<int, int>>>& adj, int root, int child, int weight) {
adj[root].push_back({child, weight});
}
void dfs(vector<vector<pair<int, int>>>& adj, int node, vector<bool>& visited, bool clear = false) {
if (clear) {
for (int i = 0; i < visited.size(); ++i) {
visited[i] = false;
}
dfs(adj, node, visited);
} else {
//
cout << node << " ";
//
visited[node] = true;
for (auto child : adj[node]) {
if (!visited[child.first]) {
dfs(adj, child.first, visited);
}
}
}
}
void bfs(vector<vector<pair<int, int>>>& adj, int node, vector<bool>& visited, bool clear = false) {
if (clear) {
for (int i = 0; i < visited.size(); ++i) {
visited[i] = false;
}
}
queue<int> q;
q.push(node);
visited[node] = true;
while (!q.empty()) {
int now = q.front();
q.pop();
//
cout << now << " ";
//
for (auto child : adj[now]) {
if (!visited[child.first]) {
visited[child.first] = true;
q.push(child.first);
}
}
}
}
int main(){
vector<vector<pair<int, int>>> adj(n);
vector<bool> visited(n);
}
回朔法
int max_time = 5;
void backtrack(vector<int> nums, vector<bool> used,int time) {
if (time >= max_time) {
for (int i : nums) {
cout << i << " ";
}
cout << endl;
return;
}
for(int i=0;i<max_time;++i){
if (used[i]) continue;
//
nums[time] = i + 1;
//
used[i]=true;
backtrack(nums,used,time+1);
used[i]=false;
}
}
int main(){
vector<int>nums(max_time);
vector<bool>used(max_time,false);
}
質數
vector<int> prime_numbers(int n) {
if (n < 2) {
return {};
}
vector<bool> isp(n + 1, true);
isp[0] = isp[1] = false;
vector<int> result;
for (int i = 2; i <= n; ++i) {
if (isp[i]) {
for (int j = i + i; j <= n; j += i) {
isp[j] = false;
}
}
}
for (int i = 2; i <= n; ++i) {
if (isp[i]) {
result.push_back(i);
}
}
return result;
}
int main(){
vector<int> result = prime_numbers(n);
}
Last updated
Was this helpful?