迭代器例子:`
set:: iterator it;
for(it = x.begin(); it != x.end(); ++it)
x.rbegin(); x.rend; ++ (反向迭代器)
for(auto w: x)
排序: sort(v.begin(), v.end())
(包括字母)(less
/ greater
)
vector
能先开辟先开辟,如果输入失败又可能这里出问题了
vector
定义的时候等于,否则可能会出问题
默认key从小到大排序
自定义按value :sort cmp(pair
获取最大值: auto i = max_element(t.begin(), t.end(), cmp)
(还有min_element
)
map
word[len] = set
(只是创建空间, 会重置原数据)
返回出现次数:m.count(length)
可以mp.first(); mp.second();
pair先比较第一个,第一个相同再比较第二个
当想插入两个: q.push(make_pair(0, 0));
大小转 小写:transform(s.begin(), s.end(), s.begin(),tolower)
小写转大写:toupper
有空格:getline(cin, s);
s.substr(0,n)
: 从1开始数n个
s.reverse(s.begin(), s.end())
: 字符串翻转
s.insert(pos, string, pos1, size_n) : 从pos1开始数的第n个字符插在pos前
s.insert(pos, n, char c) : 在下标为pos前插入n个字符c (n个相同的)
.count(begin, end, "s");
set
去重 + 自动排序
multiset: 不去重(可以删除某个点)
s.erase(pos) 删除pos迭代器所选元素
s.erase(x.begin(), x.end()) 删除[begin, end)内所有元素
s.erase(elem) 删除值为elem的元素
set.count(string s) : set内有几个与s相同的 //string同样可用
set.count(begin, end, "s");
set.count("s");
queue
queue> q;
q.insert({a, b});
q.pop();
int c = q.front().first;
int d = q.front().second;
map, greater> mp;
for (auto w : mp) {
cout << w.first;
for (auto v : w.second) {
cout << v;
cout << w.first;
}
}
#include
对给定范围进行"排序"
nth_element(l, set, r, compare)
a中第k小的值,第二个参数就应该填a+k-1
当元素较多时平均时间复杂度为O(N),元素较少时最坏情况下时间复杂度为O(N^2)。
求[first, last]这个区间中第n大小的元素,如果参数加入了compare函数,就按compare函数的方式比较。
sort函数底层使用的是快速排序算法 O(nlog2n)
其它:https://www.jianshu.com/p/a68390d78386
因此此题直接将字符画贴源码里直接交(PHP)能过。
a i ∣ a j > = l c m ( a i , a j ) a_i| a_j >= lcm(a_i, a_j) ai∣aj>=lcm(ai,aj)
对于 x,y (x≤y),若x∣y,那么 lcm(x, y) = y是一组解。
否则lcm(x, y) ≥ 2y > x or y,不可能是解。
于是就变成找序列中是不是存在一个数是另一个数的因数
LL
其实代表long long
,*1LL
是为了在计算时,把int
类型的变量转化为long long
,然后再赋值给long long
类型的变量不至于后面计算溢出 (1ll = 1, 2ll = 2)
看第 i 位是不是1,可以右移 i 位再 &1 看 u >> i & 1
(要从0开始枚举)
看取不取: state的u位置成1,说明选这个数,某种程度上可以代替数组 state | (1 << u)
奇偶本质是01
边权是0或者是1就可以转化成双端队列
scanf("%*d
", &v[i]); 那个是跳过不读的意思
10进制转n进制: 取余倒排
二分:
int mid = (l + r) / 2; l = mid + 1, r = mid;
int mid = (l + r + 1) / 2; l = mid, r = mid - 1;
memeset( , 0x3f, );
相当于每个都是0x3f3f3f3f (4个)
state |= x << i //不重,记数字 把x加到state的i位 <=> 第i位是x
auto &[k, v] : mp
将 xx 的二进制写两次等价于将 xx 后面添加一些’0’
离正方体最远最近的点是中心和脚
二分就是 最优化问题转化为判定性问题:
判断一下满足或是不满足能不能再细分 问最小值的我们一般都会想到二分
一个二叉树的小常识: 二叉树节点 向下投影,映射成的数组序列就是 中序遍历序列
区间合并
两个vector 使v1的内容和v2的后半部分相同的最简单 *** 作:
v1.assign(v2.begin() + v2.size() / 2, v2.end());
(copy也影响效率,不行)
对区间函数调用: v1.insert(v1.end(), v2.begin(), + v2.size() / 2, v2.end());
(数组插到vector也可用)
assign
: 需要完全替换一个标准序列容器内容时
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)