菜鸡纯暴力竟然AC2道,写的超级无敌复杂,还剩1小时直接交卷了
1打麻将
int main() { int T; cin >> T; for (int i = 0; i < T; ++i) { vector<string> s(7); map<char, vector<int>> hash; for (int j = 0; j < 7; ++j) { cin >> s[j]; char x = s[j][0]; char y = s[j][1]; hash[y].push_back(x); } int len1 = hash['T'].size(); int len2 = hash['B'].size(); int len3 = hash['W'].size(); if (hash['T'].size() > 3 || hash['B'].size() > 3 || hash['W'].size() > 3) { cout << "NO" << endl; continue; } map<int, int> flag; for (int l = 0; l < len1; ++l) { if (hash['T'][l] == '1' || hash['T'][l] == '4' || hash['T'][l] == '7') { flag[1]++; } else if(hash['T'][l] == '2' || hash['T'][l] == '5' || hash['T'][l] == '8') { flag[2]++; } else if(hash['T'][l] == '3' || hash['T'][l] == '6' || hash['T'][l] == '9') { flag[3]++; } } if (flag.size() != 1) { cout << "NO" << endl; continue; } for (int l = 0; l < len2; ++l) { if (hash['B'][l] == '1' || hash['B'][l] == '4' || hash['B'][l] == '7') { flag[1]++; } else if (hash['B'][l] == '2' || hash['B'][l] == '5' || hash['B'][l] == '8') { flag[2]++; } else if (hash['B'][l] == '3' || hash['B'][l] == '6' || hash['B'][l] == '9') { flag[3]++; } } if (flag.size() != 2) { cout << "NO" << endl; continue; } for (int l = 0; l < len3; ++l) { if (hash['W'][l] == '1' || hash['W'][l] == '4' || hash['W'][l] == '7') { flag[1]++; } else if (hash['W'][l] == '2' || hash['W'][l] == '5' || hash['W'][l] == '8') { flag[2]++; } else if (hash['W'][l] == '3' || hash['W'][l] == '6' || hash['W'][l] == '9') { flag[3]++; } } if (flag.size() != 3) { cout << "NO" << endl; continue; } if (flag[1] > 3 || flag[2] > 3 || flag[3] > 3) cout << "NO" << endl; else cout << "YES" << endl; } }
2十字斩,这个思想
void cal_sum(vector<vector<int>> & a, vector<vector<int>> & t) { int row = a.size(); int col = a[0].size(); vector<int> r_sum(row, 0); vector<int> c_sum(row, 0); for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) r_sum[i] += a[i][j]; } for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) c_sum[i] += a[j][i]; } for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) t[i][j] = r_sum[i] + c_sum[j] - a[i][j]; } } void find_index(vector<vector<int>> & a, vector<int> & pos) { int row = a.size(); int col = a[0].size(); int max_value = -1; //int pos_i, pos_j; for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { if (a[i][j] > max_value) { max_value = a[i][j]; pos[0] = i; pos[1] = j; } } } } void adj_v(vector<vector<int>> & a, vector<int> & pos) { a.erase(a.begin() + pos[0]); int row = a.size(); for (int i = 0; i < row; ++i) { a[i].erase(a[i].begin() + pos[1]); } } int main() { int N; cin >> N; vector<vector<int>> a(N, vector<int>(N)); for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cin >> a[i][j]; } } int cnt = N; while (cnt > 0) { if (cnt == 1) { cout << 1 << " " << 1 << endl; break; } vector<vector<int>> max_sum(N, vector<int>(N)); // 保存每行每列的和 cal_sum(a, max_sum); // 算每行每列的和 vector<int> pos(2);//坐标 find_index(max_sum, pos);//找最大和的坐标 adj_v(a, pos);//删除这一行和这一列 cout << pos[0] + 1 << " " << pos[1] + 1 << endl; cnt--; } }
全部评论
(10) 回帖