今日头条2017编程--手串
#include <iostream> #include <vector> using namespace std; //该颜色是否合格 bool IsOk(vector<int> &a, int m) { int n = a.size() - 1; for (int i = 1; i <= n; ++i) { vector<int> tmpV(m); int tmp = 0; for (int j = 0; j < tmpV.size(); ++j) { tmpV.at(j) = i + j; if (tmpV.at(j) > n) tmpV.at(j) = tmpV.at(j) - n; tmp += a.at(tmpV.at(j)); } if (tmp > 1) return false; } return true; } int main() { //输入部分 int n, m, c; cin >> n >> m >> c; vector<vector<int> > iVec(n + 1, vector<int>(c + 1, 0)); int t; int count; for (int i = 0; i < n; ++i) { cin >> count; while (count > 0) { cin >> t; iVec.at(i + 1).at(t) = 1; count--; } } //矩阵转置 vector<vector<int> > twoMat(c + 1, vector<int>(n + 1, 0)); for (int i = 1; i <= c; ++i) { for (int j = 1; j <= n; ++j) { twoMat.at(i).at(j) = iVec.at(j).at(i); } } //调用函数对每种情况进行考察 int res = 0; for (int i = 1; i <= c; ++i) { if (!IsOk(twoMat.at(i), m)) res++; } cout << res << endl; system("pause"); return 0; }
#字节跳动#