#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;
常用初始化
cpp复制代码
vector<int> v(n, 0); // n个0
int arr[1005] = {0}; // 清零
fill(arr, arr + n, 0); // 数组填充
🚀 性能提示
操作
时间复杂度
备注
vector::push_back
O(1)均摊
动态扩容
set::insert
O(log n)
有序
map::find
O(log n)
红黑树
unordered_map::find
O(1)平均
哈希表
二、最大公约数和最小公倍数
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
return (b==0)?a:gcd(a,a%b);
}
//两个数最大公约数和最小公倍数的乘积等于两数之积
int lcm(int a, int b){
return a / gcd(a,b) * b;//防止a*b溢出
}
int main(){
int a,b;cin>>a>>b;
cout<<gcd(a,b)<<'\n';
cout<<lcm(a,b)<<'\n';
return 0;
}
三、埃氏筛和欧拉筛
cpp复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7 +5;
bool is_prime[N];
//埃氏筛质数
void AS_sieve(int n){
fill(is_prime,is_prime+n+1,true);
is_prime[0] = is_prime[1] = false;
for(int i = 2; i * i <= n; i++){
if(is_prime[i]){
for(int j = i * i ; j <= n ; j+=i){
is_prime[j] = false;
}
}
}
}
//欧拉筛质数
void OL_sieve(int n) {
vector<int> primes;
fill(is_prime,is_prime + n + 1,true);
is_prime[0] = is_prime[1] = false;
for(int i = 2; i <= n; i++){
if(is_prime[i]) primes.push_back(i);
for(int j = 0; j <primes.size() && i * primes[j] <= n; j++){
is_prime[i * primes[j]] = false;
if(i % primes[j] == 0) break; //避免进行重复的标记
}
}
}
int main(){
int n;cin>>n;
OL_sieve(n);
int num = 0;
for(int i = 2; i <= n; i++){
if(is_prime[i]) {
cout<<i << " ";
num++;
if(num >= 10 && num % 10 == 0) cout<<'\n';
}
}
return 0;
}
进制转换
k进制转换10进制
cpp复制代码
//k进制转换成十进制
#include<bits/stdc++.h>
using namespace std;
using ll = long long ;
const int N = 50;
int a[N];
int main(){
string s;
cin>>s;
int k; cin>>k;
int n = s.length();
for(int i = 0; i < n; i++){
a[i] = s[i] - '0';
}
ll res = 0;
for(int i = 0;i < n ; i++){
res = res * k + a[i];
}
cout<<res<<'\n';
return 0;
}