SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
من یه cout قبل و بعد push_back ئه گذاشتم معلوم شد سر همون سطر می پره بیرون!!
الگوریتمم اینطوریه:
به هر عدد باینریش رو نسبت می دیم و اگه باینریش تو مرتبه j ام برابر 1 بود اون عدد رو تو گروه j ام به کاربر نشون می دیم. بعد هم Y های کاربر و N هاشو با 0 و 1 متناظر می کنیم و اون عدد باینریه رو به دهدهی تبدیل می کنیم که همون عدد مورد نظر کاربر میشه.
درسته؟!!
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
SABB گفت
من یه cout قبل و بعد push_back ئه گذاشتم معلوم شد سر همون سطر می پره بیرون!!
الگوریتمم اینطوریه:
به هر عدد باینریش رو نسبت می دیم و اگه باینریش تو مرتبه j ام برابر 1 بود اون عدد رو تو گروه j ام به کاربر نشون می دیم. بعد هم Y های کاربر و N هاشو با 0 و 1 متناظر می کنیم و اون عدد باینریه رو به دهدهی تبدیل می کنیم که همون عدد مورد نظر کاربر میشه.
درسته؟!!
احتمالا مشکل از push_back کردن زیاد است. vector محدودیت سایز دارد زیرا هیچ یک از تابعهای برنامه نمی تواند بیشتر از 16 مگابایت حافظه بگیرد. باید سعی کنید global بگیرید.<IMG src=modules/forums/images/smiles/53.gif>
</IMG src=modules/forums/images/smiles/53.gif>
 

SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
Goharshady گفت
SABB گفت
من یه cout قبل و بعد push_back ئه گذاشتم معلوم شد سر همون سطر می پره بیرون!!
الگوریتمم اینطوریه:
به هر عدد باینریش رو نسبت می دیم و اگه باینریش تو مرتبه j ام برابر 1 بود اون عدد رو تو گروه j ام به کاربر نشون می دیم. بعد هم Y های کاربر و N هاشو با 0 و 1 متناظر می کنیم و اون عدد باینریه رو به دهدهی تبدیل می کنیم که همون عدد مورد نظر کاربر میشه.
درسته؟!!
احتمالا مشکل از push_back کردن زیاد است. vector محدودیت سایز دارد زیرا هیچ یک از تابعهای برنامه نمی تواند بیشتر از 16 مگابایت حافظه بگیرد. باید سعی کنید global بگیرید.<IMG src=modules/forums/images/smiles/53.gif>
</IMG src=modules/forums/images/smiles/53.gif>
یه متغیر هم برای شمارش تعداد push_back ها تعریف کردم. سر push_back اولی میپره بیرون
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83

SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
SABB گفت
برنامه ای برای یک بازی بین کامپیوتر و کاربر با شرایط زیر بنویسید:
ابتدا کاربر یک عدد طبیعی یک رقمی، n، به ماشین می دهد. سپس ماشین از کاربر میخواهد که یک عدد صحیح نامنفی کوچکتر از 2
[SUP]n[/SUP] انتخاب کند و بعد با n سوال عدد مورد نظر کاربر را پیدا کند. هر سوال 2[SUP]n-1[/SUP] عدد روی صفحه نمایش می دهد و کاربر باید در صورت وجود عدد مورد نظرش در بین آن ها پاسخ Y و درغیر اینصورت پاسخ N دهد.
مثال: اگر n=3 و پاسخ های کاربر به صورت زیر باشد آنگاه عدد موردنظر کاربر 5 خواهد بود.
(مرحله دوم اولین المپیاد کامپیوتر ایران)
کد
1 3 5 7 Y
2 3 6 7 N
4 5 6 7 Y
بالاخره درست شد!
مشکل از همون push_back بود، چون وقتی اون vector رو آرایه کردم درست شد.


http://snipt.net/SABB/inoi-1-2nd-round
 

Olympiad

New Member
ارسال ها
1,268
لایک ها
134
امتیاز
0
يه سوال آسون بذاريد يكم روحيه بگيريم !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
یعنی اون سوالاتی که من گذاشتم سختن!؟!؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
من که از این چیزی نفهمیدم. لطفا الگوریتمتان را بگویید
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
Goharshady گفت
من که از این چیزی نفهمیدم. لطفا الگوریتمتان را بگویید
از طبقه ی H شروع می کنه یکی یکی میاد پایین اگه k از H کمتر یا مساوی بود آجر های طبقه ی H رو به طبقه ی H-K منتقل می کنه.

بعدشم چون آجر ها تو K طبقه اول جمع می شن میاد بزرگترینشون رو تو خروجی چاپ می کنه.


اگه بد توضیح دادم ببخشید چون کدشو چند روز پیش زدم.
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
rezashiri گفت
Goharshady گفت
من که از این چیزی نفهمیدم. لطفا الگوریتمتان را بگویید
از طبقه ی H شروع می کنه یکی یکی میاد پایین اگه k از H کمتر یا مساوی بود آجر های طبقه ی H رو به طبقه ی H-K منتقل می کنه.

بعدشم چون آجر ها تو K طبقه اول جمع می شن میاد بزرگترینشون رو تو خروجی چاپ می کنه.


اگه بد توضیح دادم ببخشید چون کدشو چند روز پیش زدم.
این شدیدا greedy هست. مطمئنید درسته؟ اثباتی برای درستی اش دارید؟ به نظر من می شه greedy حلش کرد ولی نه دیگه اینقدر greedy!!
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
Goharshady گفت
rezashiri گفت
Goharshady گفت
من که از این چیزی نفهمیدم. لطفا الگوریتمتان را بگویید
از طبقه ی H شروع می کنه یکی یکی میاد پایین اگه k از H کمتر یا مساوی بود آجر های طبقه ی H رو به طبقه ی H-K منتقل می کنه.

بعدشم چون آجر ها تو K طبقه اول جمع می شن میاد بزرگترینشون رو تو خروجی چاپ می کنه.


اگه بد توضیح دادم ببخشید چون کدشو چند روز پیش زدم.
این شدیدا greedy هست. مطمئنید درسته؟ اثباتی برای درستی اش دارید؟ به نظر من می شه greedy حلش کرد ولی نه دیگه اینقدر greedy!!
مگه سوال همینو نگفته؟

کدوم قسمتش حریصانه است؟
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
در این مثال فرض کنید k=2

طبقه تعداد آجر
5 1
4 1
3 400
2 1
1 0
الآن از طبقه ی 5 یکی به 3 می دهد و کار 3 برابر با 401 می شود و کار کل هم همین 401 است
اما اگر 5 به 4 و 4 به 2 بدهد دیگر چنین مشکلی نداریم و کار کل 400 می شود
 

rezashiri

Well-Known Member
ارسال ها
1,458
لایک ها
325
امتیاز
83
Goharshady گفت
در این مثال فرض کنید k=2

طبقه تعداد آجر
5 1
4 1
3 400
2 1
1 0
الآن از طبقه ی 5 یکی به 3 می دهد و کار 3 برابر با 401 می شود و کار کل هم همین 401 است
اما اگر 5 به 4 و 4 به 2 بدهد دیگر چنین مشکلی نداریم و کار کل 400 می شود
من اصلا متوجه حداکثر K طبقه پایین تر نشده بودم.
 

SABB

New Member
ارسال ها
704
لایک ها
25
امتیاز
0
اینقدر greedy خوبه؟:
اول مقدار همه ی طبقه ها از 1 تا k را برابر تعداد آجر های آن قرار می دهیم، بعد مقدار طبقه k+1 را بعلاوه ی مینیمم k تای پایینیش می کنیم، k+2 رو هم همینطور و...
البته باز مینیمم رو بدست نمی آریم...
 

Goharshady

New Member
ارسال ها
2,239
لایک ها
166
امتیاز
0
فرض کنید می خواهیم از طبقه ی H تعدادی آجر را انتقال بدهیم. هر آجر را به یکی از k طبقه ی زیری که min تعداد آجر را دارد انتقال می دهیم. ــ توجه کنید که min بعد از انتقال آجرها update می شود ــ
حالا ثابت کنید این کار درسته. ــ اثباتش خیلی راحته ــ
 
بالا