Codeforces 1328D - Carrusel


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;
}

Supongo que te gusta

Origin www.cnblogs.com/stelayuri/p/12578934.html
Recomendado
Clasificación