模拟计算日期的模板
int months[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
int is_leap(int year) // 计算是否是闰年
{
if (year % 4 == 0 && year % 100 || year % 400 == 0) return 1;
return 0;
}
int get_days(int year, int month) // 求某月有多少天
{
if (month == 2) return months[month] + is_leap(year);
return months[minth]
}
星期 {0,1,2,3,4,5,6} 分别表示周一二三四五六日
快读模板
inline int read()
{
int s = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
s = s*10 + ch-'0';
ch = getchar();
}
return s*f;
}
pair的hash
struct hashfunc
{
template<typename T, typename U>
size_t operator() (const pair<T, U> &i) const
{
return hash<T>()(i.first) ^ hash<U>()(i.second);
}
};
unordered_set<PII, hashfunc> S;
unordered_map<PII, int, hashfunc> mp;
二维vector<vector<int>>的自定义排序
sort(meetings.begin(), meetings.end(), [&](const vector<int>& a, const vector<int>& b){
return a[2] < b[2];
});
或者:
bool cmp(const vector<int> &met1,const vector<int> &met2){
return met1[2] < met2[2];
}
sort(meetings.begin(),meetings.end(),cmp)
离散化
//离散化预处理
inline void discrete()
{
//排序
sort(a + 1,a + n + 1);
//去重
for(int i = 1;i <= n;++i)
{
if(i == 1 || a[i] != a[i-1])
b[++m] = a[i];
}
}
//二分查找 x映射为那个1~m之间的整数
inline int query(int x)
{
return lower_bound(b + 1,b + m + 1,x) - b;
}
iota 用途 集合填充连续的数字
// iota example
#include <iostream> // std::cout
#include <numeric> // std::iota
int main () {
int numbers[10];
std::iota (numbers,numbers+10,100);
std::cout << "numbers:";
for (int& i:numbers) std::cout << ' ' << i;
std::cout << '\n';
return 0;
}
结果
数字:100 101 102 103 104 105 106 107 108 109
减法取模
$((a - b)$ % $MOD$ + $MOD)$ % $MOD$