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