结构题sort排序,cmp常用于排序倒序的处理
struct node {
int sum, a, b;
}s[2102100];
bool cmp(node x, node y) {
if (x.sum != y.sum) {
return x.sum < y.sum;
}
if (x.a != y.a) {
return x.a < y.a;
}
return x.b < y.b;
}
前者是>=x的模板,后者=<x的模板
bool check(int x) {/* ... */} // 检查x是否满足某种性质
// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid; // check()判断mid是否满足性质
else l = mid + 1;
}
return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
位运算
这两种位运算可以用于简单的运算乘和除(1<<和>>1),位运算的优先级是最低的。下面给出优先级的表格
例题,有关基础dfs
使用dfs进行深度优先搜索
#include<iostream>
using namespace std;
int n, pd[100], used[100];
void print()
{
int i;
for (i = 1; i <= n; i++) {
printf("%5d", used[i]);
}
cout << endl;
}
void dfs(int k)
{
int i;
if (k == n)
{
print();
return;
}
for (i = 1; i <= n; i++) {//一层一层的循环,
if (!pd[i]) {//如果这个点没有遍历
pd[i] = 1;//表明该数据已经遍历过了
used[k + 1] = i;//存储数据
dfs(k + 1);//进行下一层的遍历,实现下一个数据的储存
pd[i] = 0;//跳出该循环则将该数据清零
}
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}
return code;