LCT1583 统计不开心的朋友

// 模拟

#include <bits/stdc++.h>
using namespace std;

int unhappyFriends(int n, vector<vector<int>> &preferences, vector<vector<int>> &pairs) {
    vector<vector<int>> order(n, vector<int>(n));   // 定义二维数组
    for (int i = 0; i < n; i++) {   // 遍历数组
        for (int j = 0; j < n - 1; j++) {   // 遍历数组
            order[i][preferences[i][j]] = j;   // 将数组中的值加入到二维数组中
        }
    }
    vector<int> match(n);   // 定义数组
    for (auto &it : pairs) {   // 遍历数组
        match[it[0]] = it[1];   // 将数组中的值加入到数组中
        match[it[1]] = it[0];   // 将数组中的值加入到数组中
    }
    int res = 0;
    for (int x = 0; x < n; x++) {   // 遍历数组
        int y = match[x];   // 定义变量
        int index = order[x][y];   // 定义变量
        for (int i = 0; i < index; i++) {   // 遍历数组
            int u = preferences[x][i];   // 定义变量
            int v = match[u];   // 定义变量
            if (order[u][x] < order[u][v]) {   // 如果满足条件
                res++;   // 计数器加1
                break;
            }
        }
    }
    return res;
}

int main() {
    int n, m, num;
    vector<vector<int>> preferences, pairs;
    cin >> n;
    for (int i = 0; i < n; i++) {
        vector<int> preference;
        for (int j = 0; j < n - 1; j++) {
            cin >> num;
            preference.push_back(num);
        }
        preferences.push_back(preference);
    }
    cin >> m;
    for (int i = 0; i < m; i++) {
        vector<int> pair;
        for (int j = 0; j < 2; j++) {
            cin >> num;
            pair.push_back(num);
        }
        pairs.push_back(pair);
    }
    cout << unhappyFriends(n, preferences, pairs) << endl;
    return 0;
}

LCT0447 回旋镖的数量

// 模拟

#include <bits/stdc++.h>
using namespace std;

int numberOfBoomerangs(vector<vector<int>> &points) {
    int res = 0;
    for (auto &p : points) {   // 遍历数组
        unordered_map<int, int> mp;   // 定义哈希表
        for (auto &q : points) {   // 遍历数组
            int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]);   // 计算距离
            mp[dis]++;   // 将距离加入到哈希表中
        }
        for (auto &pr : mp) {   // 遍历哈希表
            res += pr.second * (pr.second - 1);   // 计算结果
        }
    }
    return res;
}

int main() {
    int n, num;
    vector<vector<int>> points;
    cin >> n;
    for (int i = 0; i < n; i++) {
        vector<int> point;
        for (int j = 0; j < 2; j++) {
            cin >> num;
            point.push_back(num);
        }
        points.push_back(point);
    }
    cout << numberOfBoomerangs(points) << endl;
    return 0;
}

LCT0166 分数到小数

// 模拟

#include <bits/stdc++.h>
using namespace std;

string fractionToDecimal(int numerator, int denominator) {
    if (numerator == 0) return "0";   // 如果分子为0,返回0
    string res;
    if ((numerator < 0 && denominator > 0) || (numerator > 0 && denominator < 0)) res += '-';   // 如果分子或分母有一个为负数,结果为负数
    long long num = abs(long(numerator));   // 将分子转换为long long类型
    long long den = abs(long(denominator));   // 将分母转换为long long类型
    res += to_string(num / den);   // 将整数部分加入到结果中
    long long remainder = num % den;   // 计算余数
    if (remainder == 0) return res;   // 如果余数为0,返回结果
    res += '.';   // 将小数点加入到结果中
    unordered_map<long long, int> mp;   // 定义哈希表
    while (remainder) {   // 如果余数不为0
        if (mp.count(remainder)) {   // 如果余数在哈希表中
            res.insert(mp[remainder], 1, '(');   // 在结果中插入左括号
            res += ')';   // 在结果中插入右括号
            break;
        }
        mp[remainder] = res.size();   // 将余数加入到哈希表中
        remainder *= 10;   // 余数乘以10
        res += to_string(remainder / den);   // 将余数加入到结果中
        remainder %= den;   // 计算余数
    }
    return res;
}

int main() {
    int numerator, denominator;
    cin >> numerator >> denominator;
    cout << fractionToDecimal(numerator, denominator) << endl;
    return 0;
}