====== Xor ====== به شما ‎$n$‎ عدد ‎$a_1$‎ تا ‎$a_n$‎ داده شده است، شما باید زیرمجموعه ای از آن را بیابید که اعداد هیچ زیرمجموعه‌ی ناتهی آن برابر با ‎0‎ نشود و جمع اعداد آن بیشینه باشد. ===== ورودی ===== در سطر اول ورودی عدد ‎$1 \leq n \leq 100$‎ آمده است، در سطر بعدی ‎$n$‎ عدد ‎$a_1$‎ تا ‎$a_n$‎ آمده است. ===== خروجی===== در تنها سطر خروجی اعداد زیر مجموعه را به ترتیب صعودی چاپ نمایید. در صورتی که چند جواب برای سؤال وجود دارد، یکی از آن‌ها را چاپ نمایید. ===== محدودیت‌ها ===== * محدودیت زمان: ۲ ثانیه * محدودیت حافظه: ۲۵۶ مگابایت ‎‎ ===== ورودي و خروجي نمونه ===== ^ ورودي نمونه ^ خروجي نمونه ^ |‎3 \\ ‎1 2 3 |‎2 3 | <پاسخ> ابتدا توجه کنید که اگر یک مجموعه از اعداد هیچ زیر مجموعه‌ی ناتهی نداشته باشد که XOR اعضای آن صفر شود، معادل این است که هیچ یک از اعضای آن را نتوان برحسب ‎XOR‎ بقیه‌ی اعضا نوشت. چون اگر یک عضو را بتوان برحسب بقیه‌ی اعضا نوشت XOR‎ این عضو با بقیه‌ی اعضا صفر می‌شود. اگر هم ‎XOR‎ یک زیر مجموعه صفر شد ‎XOR‎ هر یک از اعضا باید برابر با XOR‎ بقیه شود‎.‎ برای حل این مسئله از الگریتم حریصانه استفاده می‌کنیم. یعنی اعداد را ابتدا به ترتیب نزولی مرتب می‌کنیم. سپس به ترتیب اعداد را پیمایش می‌کنیم و هر عددی که اجتماعش با اعداد انتخاب شده‌ی قبلی تولید زیرمجموعه‌ای نمی‌کرد که XOR‎ آن صفر شود را انتخاب می‌کنیم. فرض کنید در این الگریتم اعداد ‎$x_1$‎ تا ‎$x_k$‎انتخاب شده باشند. (که اینها به ترتیب نزولی هستند) اگر این مجموعه تشکیل یک جواب بهینه بدهند که مسئله حل است. در غیر این صورت یک جواب بهینه به صورت ‎$y_1$‎ تا ‎$y_k'$‎ در نظر بگیرید. ‎$i$‎ را کوچک‌ترین اندیس بگیرید که ‎$x_i \neq y_i$‎ است. مطمئنا هیچ یک از ‎$y_1$‎ تا ‎$y_k'$‎ ها نباید مساوی با ‎$x_i$‎ باشند و چون ‎$y_1$‎ تا ‎$y_k'$‎ تشکیل یک جواب بهینه می‌دهند پس اجتماع آنها با ‎$x_i$‎ یک زیرمجموعه دارد که ‎XOR‎ اعضایش صفر هستند. ‎$x_i$‎ باید عضو این زیر‌مجوعه باشد. پس ‎$x_i$‎ را می‌توان برحسب XOR $y_1$‎ تا ‎$y_{k'}$‎ نوشت. فرض کنید این اعضا ‎$z_1$‎ تا ‎$z_m$‎ باشند. پس داریم‎:‎ ‎$$ x_i=z_1\oplus \cdots \oplus z_m $$‎ همه‌ی ‎$z_1$‎ تا ‎$z_m$‎ ‌ها نمی‌توانند از ‎$x_i$‎ بزرگ‌تر باشند چون با توجه به اینکه اعضای بزرگ‌تر از ‎$x_i$‎ در ‎$x_1$‎ تا ‎$x_k$‎ با ‎$y_1$‎ تا ‎$y_k'$‎ برابرند در این صورت زیر مجموعه‌ی ‎$x_1$‎ تا ‎$x_i-1$‎ می‌شوند. پس ‎$z_j$‎ موجود است که ‎$z_j * [[سوال ۵۲|سوال بعد]] * [[سوال ۵۰|سوال قبل]]