fbpx

Problema #1443 – control2 – Rezolvari PBInfo

de Mihai-Alexandru

Gigel a primit spre păstrare un set de n cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă..
Din valorile 1 1 0 1 se obţine numărul de control 31, care este număr prim.

#include <bits/stdc++.h>
using namespace std;

ifstream cin("control2.in");
ofstream cout("control2.out");

int prim(int n)
{
    int cnt=0;
    for(int i = 1 ; i * i <= n ; ++i)
    {
        if(n%i==0)
        cnt+=2;
        if(i*i==n)
        cnt--;
    }
    if(cnt==2)
    return 1;
    else
    return 0;
}

int main()
{
    int n;
    cin >> n;
    int f[200]={0};
    int a[100];
    int tmp;
    int c[35];
    for(int i = 0 ; i < n ; ++i)
    {
        cin >> tmp;
        f[tmp]++;
    }
    int p = 0;
    for(int i = 1 ; i <= 200 ; ++i)
    {
        if(f[i]!=0)
        {
            a[p]=f[i];
            p++;
        }
    }
    while(p%3!=0)
        p--;
    int p1=0;
    for(int i = 0 ; i < p ; i+=3)
    {
        if(a[i]%2==0 && a[i+1]%2==0 && a[i+2]%2==0)
        {
            c[p1]=1;
            p1++;
        }
        else if(a[i]%2==1 && a[i+1]%2==1 && a[i+2]%2==1)
        {
            c[p1]=1;
            p1++;
        }
        else
        {
            c[p1]=0;
            p1++;
        }
    }
    int g[3]={0};
    for(int i = 0 ; i < p1 ; ++i)
    {
        g[c[i]]++;
    }
    int nr=0;
    for(int i = 1 ; i >= 0 ; --i)
    {
        nr*=10;
        nr+=g[i];
    }
    if(prim(nr))
    cout << nr << endl << 1;
    else
    cout << nr << endl << 0;
    return 0;    
}
Comentarii

S-ar putea sa iti placa