Loading... ## 题目链接 https://ac.nowcoder.com/acm/contest/60245 - https://ac.nowcoder.com/acm/contest/view-submission?submissionId=62564169 ``` #include <iostream> #include <string> void drawU(int n) { int width = 4 * n; int height = 4 * n; std::string line = ""; // 上半部分 for (int i = 0; i < height - n; i++) { std::string line = ""; for (int j = 0; j < width; j++) { if (j < n || j >= width - n ) { line += "*"; } else { line += "."; } } std::cout << line << std::endl; } // 下半部分 for (int i = 0; i < n; i++) { std::string line = ""; for (int j = 0; j < width; j++) { if (j < n || j >= width - n ) { line += "."; } else { line += "*"; } } std::cout << line << std::endl; } std::cout << line << std::endl; } int main() { int n; std::cin >> n; drawU(n); return 0; } ``` ``` #include <iostream> #include <unordered_map> #include <vector> using namespace std; int main() { int n; // 数组的长度 cin >> n; vector<int> nums(n); // 数组 vector<char> colors(n); // 颜色 for (int i = 0; i < n; i++) { cin >> nums[i]; // 输入数组 } for (int i = 0; i < n; i++) { cin >> colors[i]; // 输入颜色 } unordered_map<int, vector<int>> red, blue; // 红色和蓝色的哈希表 for (int i = 0; i < n; i++) { if (colors[i] == 'R') { // 如果是红色,就把位置加入红色的哈希表 red[nums[i]].push_back(i); } else { // 如果是蓝色,就把位置加入蓝色的哈希表 blue[nums[i]].push_back(i); } } int ans = 0; // 答案 for (auto& p : red) { // 遍历红色的哈希表 int num = p.first; // 数值 int rsize = p.second.size(); // 红色的位置个数 if (blue.count(num)) { // 如果在蓝色的哈希表中也有相同的数值 int bsize = blue[num].size(); // 蓝色的位置个数 ans += rsize * bsize; // 计算两个位置集合的笛卡尔积个数,并累加到答案中 } } cout << ans << endl; // 输出答案 return 0; } ``` 最后修改:2023 年 08 月 31 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏