随机数
srand(time(NULL));
printf("%d", rand()%10000);
字符串反转
string reversed = str;
reverse(reversed.begin(), reversed.end());
k进制转化为10进制
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
string s;
LL res, base, k = 0;
int main()
{
cin >> s >> base;
for (int i = s.size() - 1; i >= 0; i -- )
{
if(s[i] >= 'A')
//s[i] - 'A': 当s[i]是一个大写字母时,这部分代码会将其转换为对应的十进制数字。
//例如,当s[i]是'A'时,结果为0;当s[i]是'B'时,结果为1,以此类推。
res += (s[i] - 'A' + 10) * pow(base, k++);
//s[i] - '0' 这部分代码用于将字符s[i]从其ASCII码值表示转换为对应的十进制数字。
else
res += (s[i] - '0') * pow(base, k++);
}
cout << res;
return 0;
}
十进制转化为k进制
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
string str = "0123456789ABCDEF";
int main()
{
LL n, b;
cin >> n >> b;
string ans;
while(n)
{
ans.push_back(str[n%b]);
n/=b;
}
reverse(ans.begin(), ans.end());
cout << ans;
return 0;
}
把一个数(不论正负)都映射成一个0--(n-1)的数
int t = (x % N + N) % N;
区间合并
sort(num.begin(), num.end());
int st = -2e9, ed = -2e9;
for(auto item : num)
{
if(ed < item.first)
{
if(st != -2e9) res.push_back({st, ed});
st = item.first, ed = item.second;
}
else ed = max(ed, item.second);
}
res.push_back({st, ed});
建立稀疏图
void add(int a, int b) // 添加一条边a->b
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
试除法求约数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
while (n -- ){
int a;
vector<int> q;
scanf("%d", &a);
for(int i=1;i<=a/i;i++)
{
if(a%i==0)
{
q.push_back(i);
if(a/i!=i)
q.push_back(a/i);
}
}
sort(q.begin(),q.end());
for(auto x:q)
cout <<x<<" ";
cout << endl;
}
return 0;
}
数位分离
cin >> n;
while(n)
{
cout << n%10 <<" ";
n/=10;
}
添加前导0
printf("%d-%02d-%02d\n",year,month,day);
判断日期是否合法
bool check_valid(int date)//判断日期是否合法
{
int year=date/10000;
int month=date%10000/100;
int day=date%10000%100;
if(month<=0||month>12) return false;
if(day==0 || month!=2 && day>days[month]) return false;
if(month==2)
{
if(year%4==0&&year%100!=0||year%400==0)
days[2]=29;
if(day>days[2]) return false;
}
return true;
}
并查集
int find(int x) // 并查集
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
碰见删除的数较多时,用链表
快速幂
int quickpow(int a,int b,int p)
{
int res=1;
while(b)
{
if(b&1) res=(LL)res*a%p;
a=a*(LL)a%p;
b>>=1;
}
return res;
}
最大公约数
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
小根堆
priority_queue<int, vector<int>, greater<int>> q;
大根堆
priority_queue<int> q;
线性筛选质数
//primes[]存储质数数组
//st[]表示是否是质数
//cnt表示质数个数
void get_primes(int n) // 线性筛质数
{
for (int i = 2; i <= n; i ++ )
{
if (!st[i]) primes[cnt ++ ] = i;
for (int j = 0; primes[j] <= n / i; j ++ )
{
st[primes[j] * i] = true;
if (i % primes[j] == 0) break;
}
}
}