模板

讚讚 (. ❛ ᴗ ❛.)

基本

#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?