Честно говоря эта задача самая простая. Я бы ее и олимпиадной не назвал. Нет олимпиадной "фишки".
Есть два списка чисел, нужно их сравнить.
Приведу основной фрагмент.
Подсветка синтаксиса языка cpp
for(i=0; i<n; i++){
for(j=0; j<n; j++){
if(b1[j])continue;
if(a[i]==b[j]){
b1[j]=1;
break;
}
}
if(j==n){
printf("No\n");
return 1;
}
}
printf("Yes\n");
Сравниваются массивы a и b. Массив b1 служит для того, чтобы повторно не проверять один и тот же элемент.
Вот, собственно, и все. Нет никаких изысков.
p.s.
В заключении скажу несколько слов о массивах.
В программировании часто приходится их использовать, если много входных параметров.
Всегда есть вопрос: достаточно ли места в массиве. В олимпиадных задачах обычно указываются
предельные значения для входных данных. В этом случае можно использовать статические массивы, зарезервировав для них память.
Это быстрее, чем выделять память для каждого считанного элемента. Для выделения памяти для каждого элемента
на языке C, на котором я пишу, конечно, требуется знание некоторой техники. Но в современных языках таких, например, как C#
массивы и так динамические. Вот и все, что в рамках разбора данной задачи хотел сказать.