Обсъждане на задачите от Състезание 2

1. Бирени прости числа

Броят на цифрите на търсените бирени прости числа е по-малък от 6.

   primes();

  map<string, int> mapp[10];

  makemap()

    for (int i = 0; i < nump; i++)
    {
        ostringstream os;
        os << p[i];
        string s = os.str(), ind = "0000000000";
        for (int j = 0; j < s.length(); j++) ind[s[j] - '0'] = '1';
        mapp[s.length()][ind]++;
    }  

cout << mapp[n][ind] << endl;

2. Израз нула

void varianti(vector<int> v, unsigned i){
    if (i >= v.size()){
        check(v);
        return;
    }
    v[i]= abs(v[i]);
    varianti(v,i+1);
    v[i]= -abs(v[i]);
    varianti(v,i+1);
}

3. Коалиции
всички подмножества, 210
сортиране

4. Хипотеза на Голдбах
Ератостен
 while(cin >> k)
    {
        num = 0;
        for (int i = 2; i <= k/2; i++)
            if (primes[i] && primes[k - i]) num++;
        cout << num << " ";
    }

5. Анаграми
#include <iostream>
#include <sstream>
#include <string>
#include <unordered_set>
#include <algorithm>

using namespace std;

int main() {
    string line;
    while (getline(cin, line)) {
        istringstream iss(line);
        unordered_set<string> s;
        string next;
        while (iss >> next) {
            sort(next.begin(), next.end());
            s.insert(next);
        }
        cout << s.size() << endl;
    }
    return 0;
}

6. Автомат

7. Политическа сила
идея за решение

8. Прости пермутации

ll s2ll(string ss)
{
    ll nn;
    istringstream is(ss);
    is >> nn;
    return nn;
}

bool prime(string ss)
{
    ll k = s2ll(ss);
    ll kk = sqrt(k);
    for (ll i = 0; i <= nump && i < kk; i++)
        if (k%p[i] == 0) return false;
    return true;
}

string int2s(ll nn)
{
    ostringstream os;
    os << nn;
    return os.str();
}

ll k, num;

int main0()
{
    while (cin >> k)
    {
   //     cout << k << endl;
        string s = int2s(k);
        sort(s.begin(), s.end());
        num = 0;
        do
        {
            if (prime(s))
            { num++; //cout << s << " ";
            }
        }
        while(next_permutation(s.begin(), s.end()));
       
        cout << num << endl;
    }
   return 0;
}

9. N-то число

10. Бирено парти

11. Разбивания

set<string> sett;

unsigned mp[MAXN + 1];
unsigned nn;

void print(unsigned length)
{
    ostringstream os;
    unsigned i;
    os << nn << "=";
       for (i = 1; i < length; i++) os << mp[i] << "+";
  //     printf("%u+", mp[i]);
       os << mp[length] << endl;
 //    printf("%u\n", mp[length]);
    sett.insert(os.str());
}

void devNum(unsigned n, unsigned pos)
{
     if (0 == n)
     print(pos-1);
     else
     {
         unsigned k;
         for (k = n; k >= 1; k--)
         {
             mp[pos] = k;
             if (mp[pos] <= mp[pos-1]) devNum(n-k, pos+1);
         }
     }
}

unsigned n;

int main()
{
    unsigned k;
    while(cin >> nn >> k)
    {
        sett.clear();
        n = nn;
        mp[0] = n+1;
        devNum(n, 1);

        cout << sett.size() << " ";
        unsigned i = 0;
        for (set<string>::iterator it = sett.begin(); it != sett.end(); ++ it)
        {
            i++;
            if (i == k) cout << *it;
        }
    }
    return 0;
}

1 1
3 3
10 10
30 3
30 5604
50 1

50 25
50 10000
50 200000
50 204226
1 1=1
3 3=3
42 10=3+2+2+1+1+1
5604 30=10+10+1+1+1+1+1+1+1+1+1+1
5604 30=9+9+9+3
204226 50=1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
204226 50=10+10+10+10+4+3+2+1
204226 50=10+7+7+7+7+5+4+2+1
204226 50=9+8+8+8+8+3+2+2+2
204226 50=9+9+9+9+9+5

12. Пъзел

Място
Студент
Hackerrank
зад.
време
1
Nicolay Giraldo
@f107526 5
626
-
Даниел Бояджиев
@daniel_boyadhiev -
-
6
Васил Василев @f105031_w 4
714
5
Цветалин Христов @ts_hristov02 4
667
3
Филип Спасов @LegendAri 4
405
7
Даниел Денисов @danikmass121 4
752
9
Виктор Мореев @moreevviktor 3
548
10
Иво Ивайлов Живков
@ivo_i321
3
614
4
Виктор Андреев
@Viksan
4
609
2
Ангел Пенчев
@batch123
5
738
12
Димитър Димитров
@dimitur_dimitrow
-
-
8

@mirella
3
460
11

@georgi4511
2
395
12

@danielpaskalev
-
-

Участниците в това състезание могат да предложат задача (условие, решение, тестови примери) за следващото състезание!