Skip to content

Instantly share code, notes, and snippets.

@ramntry
Created December 22, 2011 10:31
Show Gist options
  • Select an option

  • Save ramntry/1509845 to your computer and use it in GitHub Desktop.

Select an option

Save ramntry/1509845 to your computer and use it in GitHub Desktop.
#include <fstream>
#include <iostream>
using namespace std;
/**
* Главная идея: Если множество чисел второго массива лежит во множестве
* чисел первого и данные множества равномощны, то они равны.
*/
int main()
{
// ifstream cin("input.txt");
// ofstream cout("output.txt");
char buf[64001]; // экономим память - байта вполне достаточно
for (int i = 0; i < 64001; i++)
buf[i] = 0;
char *elems = buf + 32000; // Для обработки отрицательных значений
int lenTop = 0;
cin >> lenTop;
int lenBot = 0;
cin >> lenBot;
int uniq = 0; // счетчик мощности множества чисел первого массива
int cur = 0;
for (int i = 0; i < lenTop; i++)
{
cin >> cur;
if (elems[cur] == 0) // Если такое число еще не встречалось
{
uniq++; // мощность нашего множества увеличивается
elems[cur] = 1;
}
}
int ans = 1;
for (int i = 0; i < lenBot; i++)
{
cin >> cur;
if (elems[cur] == 0) // Если во втором массиве обнаружен элемент,
{ // которого нет в первом
ans = 0;
break;
}
if (elems[cur] == 1) // Если число в первом массиве есть, но во
{ // втором мы встречаем его впервые,
uniq--; // разность мощностей множеств чисел первого
elems[cur] = 2; // ... массива и второго уменьшается
}
}
if (ans && !uniq) // если все числа второго массива есть в
cout << 1 << endl; // ... в первом и разность их множеств пуста
else
cout << 0 << endl; // иначе ответ нет
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment