در زبان C++ برنامهای بنویسید که عدد n و سپس n شناسه رشتهای بازیکن را از ورودی میگیرد و با استفاده از unordered_set اولین شناسهای که برای بار دوم ظاهر میشود را چاپ کند و در صورت نبود تکرار -1 را چاپ نماید.
5.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:18 0.0
برای حل، از کانتینر unordered_set (#include ) استفاده کنید: یک مجموعه خالی بسازید، رشتهها را یکییکی بخوانید، اگر شناسه پیش از این در مجموعه وجود داشت آن را چاپ کرده و برنامه را خاتمه دهید و در غیر این صورت آن را وارد مجموعه کنید؛ اگر حلقه تمام شد و تکراری نیافتید -1 چاپ کنید. unordered_set جستوجو و درج را بهطور متوسط در زمان O(1) انجام میدهد، بنابراین این روش برای مقادیر بزرگ مناسب است — برای بهینهتر شدن میتوانید از reserve(n) استفاده کنید و برای ورودی بزرگ از ios::sync_with_stdio(false) و cin.tie(nullptr) بهره ببرید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای بهینهسازی کارایی، قبل از ورود شناسهها مقدار reserve(n) را به unordered_set بدهید تا از بازنشانیهای پیدرپی جلوگیری شود. همچنین فعالسازی ios::sync_with_stdio(false) و cin.tie(nullptr) برای ورودی/خروجی بزرگ میتواند سرعت اجرا را به طور قابل توجهی افزایش دهد. در حلقه، اگر شناسهای قبلاً در مجموعه وجود داشت، همان موقع آن را چاپ کنید و برنامه را خاتمه دهید؛ در غیر این صورت شناسه را وارد مجموعه کنید و پس از پایان حلقه -1 چاپ شود. توجه کنید که مقایسه رشتهای در unordered_set باید دقیق باشد و در برخی موارد کاراکترهای غیرطباعی یا فاصلهها میتواند به اختلاف منجر شود.
گزارش