Description
有一个由n个数字组成的序列,序列的每个数字不是1就是2。如果一个序列是第K完美序列,则这个序列满足以下两点;
1.k是n的因子。
2.这个序列中每隔k个元素都相等。
例如序列(1,2,1,2,1,2,1,2),不仅是一个第2完美序列而且又是一个第4完美序列。序列(1,1,1,1)是一个第1完美序列。
你的任务是给定一个由n个数字组成的序列,最少需要改变几个元素才能使这个序列变成一个第K完美序列。
Input
多组测试数据。
每组测试数据的第一行为两个正整数n,k(1<=k<=n<=100)。
第二行为n个由空格分隔的正整数代表这个序列。
Output
对于每组测试数据,输出最少需要改变的次数。
Sample Input
6 2
2 1 2 2 2 1
8 4
1 1 2 1 1 1 2 1
9 3
2 1 1 1 2 1 1 1 2
Sample Output
1
0
3
思路
要求改变次数最少,换句话说那就是每隔K个数相同的要尽量多,需要改的就是少数的不同
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n,k,i,j,same,dif,sum;
int num[105];
while(~scanf("%d%d",&n,&k))
{
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
sum=0;
for(i=0;i<k;i++)
{
same=dif=0;
for(j=0;j<n/k;j++)
{
if(num[i+j*k]==num[i])
same++;
else
dif++;
}
sum+=min(same,dif);
}
printf("%d\n",sum);
}
return 0;
}