一些小技巧

枚举二进制下的子集

for(int s=S;s;s=(s-1)&S)

然后 \(s\) 就枚举了 \(S\) 二进制下的所有子集。

全排列

c++ 内置了一个比较方便的函数:
next_permutation()
我们可以通过这个直接得到下一个全排列。
具体的使用方法是开一个数组初始塞上一个排列然后调用即可

int a[10]
for(int i=0;i<10;i++)a[i]=i;
do{
  
}while(next_permutation(a,a+10));  //这里是正常的左闭右开

清空 vector

vector<int>().swap(vec);

对单个元素的排序

如果我们不需要对整个序列排序,只需要要求某一个位置是排序后正确的元素,就用
nth_element(a+l,a+mid,a+r+1,cmp)
其保证了 \(mid\) 左边的位置全部小于它,右边都大于它。

posted @ 2025-07-18 08:16  all_for_god  阅读(9)  评论(0)    收藏  举报