今日头条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;
}
#字节跳动#
