Processing math: 100%

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی انتخاب تیم:دوره ی ۲۵:سوال ۴

Sepidedam

علی در هنگام انجام دوی صبحگاهی به دستگاه عجیبی برخورد کرد. در این دستگاه n عدد دور دایره در جایگاه‌های 0 تا n1 نوشته شده‌اند و یک دکمه زیر این دایره قرار داده شده است. پس از بررسی‌های فراوان علی به این نتیجه رسید که با زدن دکمه‌ی دستگاه عملیات زیر انجام می‌شود:

اگر پیش از زدن دکمه‌ی دستگاه در جایگاه i ام عدد ai و پس از زدن دکمه‌ی دستگاه در این جایگاه عدد bi نوشته شده باشد:

bi=a(i+c0)modna(i+c1)modna(i+ck1)modn

برنامه‌ای بنویسید که مشخص کند اعداد پس از t بار فشرده شدن دکمه چه تغییری می‌کنند.

پیاده‌سازی

در این سوال شما باید توابع زیر را پیاده‌سازی کنید.

  • void getStatus(int n, int *a, int k, int *c, string ts, int *ans)

این تابع دقیقا یک‌بار فراخوانی می‌شود. آن را طوری پیاده‌سازی کنید که اعداد نهایی را در آرایه‌ی مربوطه بنویسد.

  • n: تعداد اعداد دستگاه
  • a: آرایه‌ای به طول n. در ابتدا در جایگاه i (0in1) ام دور دایره عدد ai نوشته شده است.
  • k: تعداد اعضای آرایه‌ی c
  • c: آرایه‌ای به طول k. معادل آرایه‌ی c در متن سوال.
  • ts: تعداد دفعات فشرده شدن دکمه‌ی دستگاه در مبنای دو.
  • ans: آرایه‌ای به طول n. وضعیت دستگاه را، پس از t بار فشرده شدن دکمه، در این آرایه بریزید.

ارزیاب نمونه

ارزیاب نمونه ورودی را به صورت زیر می‌خواند:

  1. در خط اول یک رشته به طول n آمده است که هر حرف آن صفر یا یک است و حرف i (0in1)ام آن برابر ai است.
  2. در خط دوم یک رشته به طول n آمده است که هر حرف آن صفر یا یک است و اگر حرف i (0in1) ام آن یک باشد، عدد i در دنباله‌ی c آمده است.
  3. در خط سوم یک رشته آمده است که برابر با عدد t در مبنای دو است.

زیرمسئله‌ها

  • زیرمسئله‌ی اول (۷۵ نمره): k×n105.
  • زیرمسئله‌ی دوم (۲۵ نمره): بدون محدودیت اضافی.

محدودیت‌ها

  • محدودیت زمان: ۵ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت
  • 1n,k105
  • 1|ts|105
  • حداکثر 15 عدد یک در ts وجود دارد.

ورودی و خروجی نمونه

ورودی نمونه خروجی نمونه
1010
0100
1
0101

ابزار صفحه