A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

A Drop of the Programming Sea

یک قطره از دریای برنامه نویسی: وبلاگ امیرحسین مهدی‌نژاد، برنامه‌نویس، مدرس برنامه‌نویسی و دانشجوی مهندسی کامپیوتر

● Codeforces Round #206 (Div. 1) - A. Vasya and Robot

چهارشنبه, ۱۵ آبان ۱۳۹۲، ۰۵:۳۸ ب.ظ

قلی از دانش آموزان گروه مکانیک دبیرستان علامه حلی 5 است! برای سمینار سوّم، او رباتی ساخته است که قابلیت های زیر را دارد:

     یک بازوی راست و یک بازوی چپ دارد که می تواند به وسیله ی آنها شئی را بلند کند.

     اگرشئی را با بازوی راست بلند کند، به اندازه ی (وزن بازوی راست × وزن شئ) سنگین خواهد بود و اگرشئی را با بازوی چپ بلند کند، به اندازه ی (وزن بازوی چپ × وزن شئ) سنگین خواهد بود.

     اگر دوبار متوالی از بازوی راستش کار بکشد، به مقدار Qr به سنگینی افزوده می شود و اگر دوبار متوالی از بازوی چپش کار بکشد، به مقدار Ql به سنگینی افزوده می شود.

قبل از برگزاری سمینار، برای تست نحوه ی عملکرد و تأیید پروژه، n شئ با وزن های W1 , W2, ..., Wn در یک ردیف گذاشته اند به طوری که شئ n-ام در سمت چپ قرار گرفته است و ربات باید همه ی اشیاء را بلند کند. از قلی می خواهند طوری ربات را هدایت کند که کمترین انرژی را مصرف کند (هرچه مجموع سنگینی های وارد بر دو بازوی ربات بیشتر شود، انرژی بیشتری می سوزاند).

و مسلّم است که ربات نمی تواند شئی که در سمت چپ است را با دست راست بلند کند (و بلعکس) و نیز مجاز به برداشتن از اشیاء میانی نیست. قلی برای رساندن پروژه به سمینار، از کامپیوتری های مدرسه کمک می خواهد...


input
3 4 4 19 1
42 3 99
output
576

ورودی:

خط اوّل شامل پنج عدد صحیح مثبت ( n, l, r, Ql, Qr ( 1 ≤ n ≤ 105; 1 ≤ l, r ≤ 100; 1 ≤ Ql, Qr ≤ 10است. (به ترتیب n نشانگر تعداد اشیاء، l, r نشانگر وزن بازوی راست و چپ و Ql, Qنشانگر جریمه اضافی بازوی راست و چپ هستند)

در خط دوّم n عدد صحیح مثبت در بازه ی 1 تا 100 داده می شود که نشانگر وزن هر شئ است.


خروجی:

در یک خط، کمترین انرژی مصرفی ربات را چاپ کنید.


// A Drop of the Programming Sea - adops.blog.ir #include <algorithm> #include <iostream> using namespace std; const unsigned int Max_n = 100010; int main() { long long *sum = new long long[Max_n]; long long n ,l ,r ,ql ,qr; cin >> n >> l >> r >> ql >> qr; for(int i=0; i<n; i++) { long long input; cin >> input; sum[i+1] = sum[i] + input; } long long ans = 1LL<<40; for(int i=0; i<n+1; i++) { long long nr = n-i, nl = i; long long res = l * sum[i] + r * (sum[n]-sum[i]); if(nr > nl) res += (nr-nl-1) * qr; else if(nl > nr) res += (nl-nr-1) * ql; ans = min(ans, res); } cout << ans << endl; }


نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی