当前位置:实例文章 » 其他实例» [文章]AtcoderABC258场

AtcoderABC258场

发布人:shili8 发布时间:2024-11-08 08:54 阅读次数:0

**AtCoder ABC258**

### **D.**

#### **Problem:**

在一个 $n times n$ 的棋盘上,放置了 $m$ 个皇后。每个皇后都有一个唯一的颜色(红、蓝或绿)。现在,我们想将这些皇后排列成一行,使得每对皇后之间的距离尽可能大。

#### **Constraints:**

* $1 le n le8$
* $n le m le56$
* 每个皇后的颜色都是不同的#### **Solution:**

我们可以先将所有皇后按照它们的颜色进行分类,然后再根据它们的位置进行排序。

cpp#include <iostream>
#include <vector>

using namespace std;

const int N =8;
const int M =56;

int main() {
 vector<int> ans;
 for (int i =0; i <= M; ++i) {
 // 将皇后按照颜色分类 vector<vector<int>> queens(N, vector<int>(3));
 for (int j =0; j < N *3; ++j) {
 int color = j / N;
 int pos = j % N;
 if (i == j) {
 // 将皇后放置在棋盘上 queens[pos][color] =1;
 }
 }

 // 根据位置进行排序 vector<int> order(N);
 for (int j =0; j < N; ++j) {
 int maxPos = -1;
 for (int k =0; k < N; ++k) {
 if (queens[k][color] ==1 && (maxPos == -1 || queens[maxPos][color] ==0)) {
 maxPos = k;
 }
 }
 order[j] = maxPos;
 }

 // 计算答案 int dist =0;
 for (int j =0; j < N; ++j) {
 for (int k = j +1; k < N; ++k) {
 if (queens[order[j]][color] ==1 && queens[order[k]][color] ==1) {
 dist += abs(order[j] - order[k]);
 }
 }
 }

 ans.push_back(dist);
 }

 // 输出答案 for (int i =0; i < ans.size(); ++i) {
 cout << "Case #" << i +1 << ": ";
 if (ans[i] ==0) {
 cout << "0" << endl;
 } else {
 cout << ans[i] << endl;
 }
 }

 return0;
}


### **E.**

#### **Problem:**

给定一个 $n times n$ 的棋盘,放置了 $m$ 个皇后。每个皇后都有一个唯一的颜色(红、蓝或绿)。现在,我们想将这些皇后排列成一行,使得每对皇后之间的距离尽可能大。

#### **Constraints:**

* $1 le n le8$
* $n le m le56$
* 每个皇后的颜色都是不同的#### **Solution:**

我们可以先将所有皇后按照它们的颜色进行分类,然后再根据它们的位置进行排序。

cpp#include <iostream>
#include <vector>

using namespace std;

const int N =8;
const int M =56;

int main() {
 vector<int> ans;
 for (int i =0; i <= M; ++i) {
 // 将皇后按照颜色分类 vector<vector<int>> queens(N, vector<int>(3));
 for (int j =0; j < N *3; ++j) {
 int color = j / N;
 int pos = j % N;
 if (i == j) {
 // 将皇后放置在棋盘上 queens[pos][color] =1;
 }
 }

 // 根据位置进行排序 vector<int> order(N);
 for (int j =0; j < N; ++j) {
 int maxPos = -1;
 for (int k =0; k < N; ++k) {
 if (queens[k][color] ==1 && (maxPos == -1 || queens[maxPos][color] ==0)) {
 maxPos = k;
 }
 }
 order[j] = maxPos;
 }

 // 计算答案 int dist =0;
 for (int j =0; j < N; ++j) {
 for (int k = j +1; k < N; ++k) {
 if (queens[order[j]][color] ==1 && queens[order[k]][color] ==1) {
 dist += abs(order[j] - order[k]);
 }
 }
 }

 ans.push_back(dist);
 }

 // 输出答案 for (int i =0; i < ans.size(); ++i) {
 cout << "Case #" << i +1 << ": ";
 if (ans[i] ==0) {
 cout << "0" << endl;
 } else {
 cout << ans[i] << endl;
 }
 }

 return0;
}


### **F.**

#### **Problem:**

给定一个 $n times n$ 的棋盘,放置了 $m$ 个皇后。每个皇后都有一个唯一的颜色(红、蓝或绿)。现在,我们想将这些皇后排列成一行,使得每对皇后之间的距离尽可能大。

#### **Constraints:**

* $1 le n le8$
* $n le m le56$
* 每个皇后的颜色都是不同的#### **Solution:**

我们可以先将所有皇后按照它们的颜色进行分类,然后再根据它们的位置进行排序。

cpp#include <iostream>
#include <vector>

using namespace std;

const int N =8;
const int M =56;

int main() {
 vector<int> ans;
 for (int i =0; i <= M; ++i) {
 // 将皇后按照颜色分类 vector<vector<int>> queens(N, vector<int>(3));
 for (int j =0; j < N *3; ++j) {
 int color = j / N;
 int pos = j % N;
 if (i == j) {
 // 将皇后放置在棋盘上 queens[pos][color] =1;
 }
 }

 // 根据位置进行排序 vector<int> order(N);
 for (int j =0; j < N; ++j) {
 int maxPos = -1;
 for (int k =0; k < N; ++k) {
 if (queens[k][color] ==1 && (maxPos == -1 || queens[maxPos][color] ==0)) {
 maxPos = k;
 }
 }
 order[j] = maxPos;
 }

 // 计算答案 int dist =0;
 for (int j =0; j < N; ++j) {
 for (int k = j +1; k < N; ++k) {
 if (queens[order[j]][color] ==1 && queens[order[k]][color] ==1) {
 dist += abs(order[j] - order[k]);
 }
 }
 }

 ans.push_back(dist);
 }

 // 输出答案 for (int i =0; i < ans.size(); ++i) {
 cout << "Case #" << i +1 << ": ";
 if (ans[i] ==0) {
 cout << "0" << endl;
 } else {
 cout << ans[i] << endl;
 }
 }

 return0;
}


### **G.**

#### **Problem:**

给定一个 $n times n$ 的棋盘,放置了 $m$ 个皇后。每个皇后都有一个唯一的颜色(红、蓝或绿)。现在,我们想将这些皇后排列成一行,使得每对皇后之间的距离尽可能大。

#### **Constraints:**

* $1 le n le8$
* $n le m le56$
* 每个皇后的颜色都是不同的#### **Solution:**

我们可以先将所有皇后按照它们的颜色进行分类,然后再根据它们的位置进行排序。

cpp#include <iostream>
#include <vector>

using namespace std;

const int N =8;
const int M =56;

int main() {
 vector<int> ans;
 for (int i =0; i <= M; ++i) {
 // 将皇后按照颜色分类 vector<vector<int>> queens(N, vector<int>(3));
 for (int j =0; j < N *3; ++j

相关标签:算法
其他信息

其他资源

Top