知识点杂烩
getline与stringstream的用法
https://www.acwing.com/problem/content/922/
#include <bits/stdc++.h> using namespace std; const int N = 505; int n, m; int dist[N], stop[N], q[N]; bool g[N][N]; void bfs() { memset(dist, 0x3f, sizeof dist); dist[1] = 0; int hh = 0, tt = 0; q[0] = 1; while (hh <= tt) { auto t = q[hh ++]; for (int i = 1; i <= n; i ++) if (g[t][i] && dist[i] > dist[t] + 1) { dist[i] = dist[t] + 1; q[++ tt] = i; } } } int main() { cin >> m >> n; string str; getline(cin, str); while (m --) { getline(cin, str); stringstream ssin(str); int cnt = 0, p; while (ssin >> p) stop[cnt ++] = p; for (int i = 0; i < cnt; i ++) for (int j = i + 1; j < cnt; j ++) g[stop[i]][stop[j]] = true; } bfs(); if (dist[n] == 0x3f3f3f3f) cout << "NO" << endl; else cout << max(dist[n] - 1, 0) << endl; return 0; }
给数组排序所需的最少操作数
若每次只能交换相邻两项则最少操作数为逆序对
若每次可以交换任意两项则最少操作数为 n - cnt, cnt为环图的数量

https://leetcode.cn/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-level/description/
函数
所有带 ll 的名字,均为 long long 类型下运算,否则将当作 int 来算。
__builtin_ctz( ) / __buitlin_ctzll( ) (第一个下划线为两个下划线):返回括号内数的二进制下末尾0的个数
如__builtin_ctz(4) = 2
__buitlin_clz( ) / __buitlin_clzll( ) :返回括号内数的二进制下前导0的个数
__builtin_sqrt( ) __builtin_sqrtf( ) :快速开平方,第一个返回float,第二个返回double
next(it), prev(it)可以分别获得目前迭代器 it 的下一个迭代器和上一个迭代器

浙公网安备 33010602011771号