知识点杂烩

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;
}
View Code

 

给数组排序所需的最少操作数

若每次只能交换相邻两项则最少操作数为逆序对

若每次可以交换任意两项则最少操作数为 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 的下一个迭代器和上一个迭代器

给一个区间加上等差序列相当于给差分序列都加上等差d,且第一个元素为等差序列的 a1.

posted @ 2022-10-28 16:36  Leocsse  阅读(40)  评论(0)    收藏  举报