در زبان 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) بهره ببرید.

توسط پژوهشگر در 221 روز قبل ساعت 01:18
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 221 روز قبل ساعت 13:46

برای بهینه‌سازی کارایی، قبل از ورود شناسه‌ها مقدار reserve(n) را به unordered_set بدهید تا از بازنشانی‌های پی‌درپی جلوگیری شود. همچنین فعال‌سازی ios::sync_with_stdio(false) و cin.tie(nullptr) برای ورودی/خروجی بزرگ می‌تواند سرعت اجرا را به طور قابل توجهی افزایش دهد. در حلقه، اگر شناسه‌ای قبلاً در مجموعه وجود داشت، همان موقع آن را چاپ کنید و برنامه را خاتمه دهید؛ در غیر این صورت شناسه را وارد مجموعه کنید و پس از پایان حلقه -1 چاپ شود. توجه کنید که مقایسه رشته‌ای در unordered_set باید دقیق باشد و در برخی موارد کاراکترهای غیرطباعی یا فاصله‌ها می‌تواند به اختلاف منجر شود.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری