Хора, искам да питам в решението на тази задача какво точно от материала в курса се решава? Решението, което дава пълен брой точки е:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _01OddNumber { class Program { static void Main(string[] args) { long result = 0; int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { result ^= long.Parse(Console.ReadLine()); } //ISet<long> numbers = new HashSet<long>(); //for (int i = 0; i < n; i++) //{ // long curNum = long.Parse(Console.ReadLine()); // if (numbers.Contains(curNum)) // { // numbers.Remove(curNum); // } // else // { // numbers.Add(curNum); // } //} //result = numbers.First(); Console.WriteLine(result); } } }

Вярно, че трикът с побитовата операция не е съвсем тривиален да се сети човек, но ако погледнете DSA решението под него (коментирания код), и пробвате да го пуснете, удря лимита на паметта. Това да не е някаква уловка, дето докато си мислиш, че трябва в задачата да ползваш някакви сложни структури, които си учил току що, се прецакваш :), или аз изпускам нещо...