时间限制:1秒
空间限制:65536K
作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串——每个串珠要么无色,要么涂了若干种颜色。为了使手串的色彩看起来不那么单调,金主要求,手串上的任意一种颜色(不包含无色),在任意连续的m个串珠里至多出现一次(注意这里手串是一个环形)。手串上的颜色一共有c种。现在按顺时针序告诉你n个串珠的手串上,每个串珠用所包含的颜色分别有哪些。请你判断该手串上有多少种颜色不符合要求。即询问有多少种颜色在任意连续m个串珠中出现了至少两次。
输入描述:
第一行输入n,m,c三个数,用空格隔开。(1 <= n <= 10000, 1 <= m <= 1000, 1 <= c <= 50) 接下来n行每行的第一个数num_i(0 <= num_i <= c)表示第i颗珠子有多少种颜色。接下来依次读入num_i个数字,每个数字x表示第i颗柱子上包含第x种颜色(1 <= x <= c)
输出描述:
一个非负整数,表示该手链上有多少种颜色不符需求。
输入例子1:
5 2 3
3 1 2 3
0
2 2 3
1 2
1 3
输出例子1:
2
参考代码
使用color[x][y]代表颜色x在y个珠子中是否出现,从颜色的角度去判断。
#include<iostream>
using namespace std;
int main()
{
int color[51][10001];
int n,m,c;
cin>>n>>m>>c;
int i,j,x,num_i;
for(i=1;i<n+1;i++)
{
cin>>num_i;
for(j=0;j<num_i;j++)
{
cin>>x;
color[x][i]=1;
}
}
int sum;
for(x=1;x<c+1;x++)//判断颜色x是否合格
{
for(i=1;i<n+1;i++)
{
int count=0;
int value=0;
for(j=0;j<m;j++)//判断之后的m个珠子里颜色x是否重复
{
int key=i+j;
if(key>n)
key=key%n;
if(color[x][key]==1)
{
count++;
if(count==2)
{
sum++;
value=-1;
break;
}
}
}
if(value==-1)
break;
}
}
cout<<sum;
return 0;
}
标签:种颜色,颜色,int,编程,手串,串珠,color 来源: https://blog.csdn.net/weixin_44611644/article/details/95300838
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。