El significado de los problemas
a contar una secuencia de diferentes números representan diferentes especies animales, es necesario dar a cada animal de coloración
Si dos diferentes especies animales adyacentes, entonces deben ser pintadas de un color diferente
Dada de final de secuencia a extremo, es decir, el primero y el último de la adyacente
Preguntar cómo muchos colores a un mínimo de recubrimiento, y el esquema de colores de salida
La misma especie animal se pueden pintar en diferentes colores
Ideas de resolución de problemas
Obviamente, todos de la misma especie son solo color
Si aparecen los dos animales, se necesitan dos colores, la misma especie pueden ser pintadas del mismo color
Si tres o más animales, se da como un anillo, de extremo a extremo
Cabe señalar que, si un animal diferente de principio a fin, entonces la respuesta debe ser diferente de un extremo a otro
Si no tenemos en cuenta el caso de un extremo a otro, codicioso entenderse sólo dos colores, siempre y cuando al lado dos animales de diferentes colores puede ser
Se puede conmutarse ida y vuelta entre 1 y 2, se encontrará con diferente de funcionamiento de p = 3-p
juicio final, si está satisfecho n>=3&&ar[1]!=ar[n]&&ans[1]==ans[n]
, indica que la cola de la necesidad de cambiar el color Tipo
Pero si la libertad de cambiar la especie puede provocar otras partes para cumplir con el significado original del título se convierte en un esquema de colores no cumple con el significado de las preguntas
Evitar esta situación, sino también teniendo en cuenta, si hay dos especies animales adyacente posición idéntica
Luego, a partir de esta posición intermedia, todos los lados en cada lado 2 se convierte en 1, entonces todo 2 se convierte en 1, la relación entre uno al otro no se cambia
Título y la descripción de las mismas especies de animales pueden han pintado de un color diferente, para que esquema de colores está destinado a satisfacer el problema
Si la misma posición no existen dos especies animales adyacentes, entonces no se puede dar la vuelta a cada lado, esta vez sólo unas pocas especies aumentará a 3, el último animal en la coloración de 3 para cumplir con el significado de las preguntas
El código completo
#include<bits/stdc++.h>
using namespace std;
int ar[200050],ans[200050];
void solve(){
int n,i,p=1,kd=1,flag=0;
cin>>n>>ar[1];
ans[1]=1;//第一只动物直接处理成颜色1
for(i=2;i<=n;i++)//从2开始读入
{
cin>>ar[i];
if(ar[i]!=ar[i-1])
{
kd=2;//出现不同种类动物,种类数先变为2
p=3-p;
ans[i]=p;
}
else
{
flag=i;//记录相邻种类相同的位置
ans[i]=p;
}
}
if(n>=3&&ar[1]!=ar[n]&&ans[1]==ans[n])
{
if(flag)
{
for(i=flag;i<=n;i++)
ans[i]=3-ans[i];//flag其后全部翻转即可
}
else
{
kd=3;
ans[n]=3;
}
}
cout<<kd<<'\n';
for(i=1;i<=n;i++)
cout<<ans[i]<<' ';
cout<<'\n';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--)
solve();
return 0;
}