Loading...
hri100nz avatar hri100nz 0 Точки

Задача за парти клуб :)

Здравейте,

децата ми имат следната задача:

Зад. Парти център има собствена зала с капацитет на ден от А на брой партита по 1 час с участие максимум  на В на брой деца във всяко. При недостиг наемат до три пъти по 1 час на ден втора зала за P деца на цена Х лв на час.

Децата, които не са включени в партитата през деня се прехвърлят (добавят към заявката) за следващ ден. На всеки К-ти ден правят компенсаторно парти за 1 час и наемат огромна зала за останалите деца на цена Y лв.

За следващите N дена вече са получили заявките. Стремят се всяко парти да бъде с максималния възможен брой деца. Между две партита не изчисляваме време – приемаме, че всяко следващо започва веднага след предходното. За собствената си зала естествено не заплащат наем. В един ден може да се наеме или втората или компенсаторната зала. Партитата трябва да се организират за Nте дни и ако се налага, последния ден се наема залата за компенсаторно парти.

Съставете програма, която изчислява минималните разходи на парти-центъра при така постъпилите заявки.

Вход: На първия ред на входа се въвеждат числата А (бр на ден), B (бр деца в парти), P (деца за втора зала), X (лв за 2 зала), K (на кой ден има комп зала) и Y (сума за нея).

На втория ред на входа се въвежда N (за колко дена са заявките) нека да е 3.

На третия ред на входа се въвеждат N на брой числа, показващи броя деца заявили желание за участие (за колкото дни са заявките толкова броя деца за всеки ден)

Изход: На единствен ред изведете минималната възможна цена за включване на всички деца в партитата.

Ограничения:

1 <= А, B, P, X, K, Y <= 1000

3 <= N <= 10 000

1 <= брой желаещи за деня <= 10 000 000

Примери:

Вход: 4 10 20 62 5 100

7

82 195 200 74 30 181 202

Изход: 1130

Написахме следния код, но не ни се получава изхода :)

#include <iostream>
using namespace std;
int main()
{
    long i,n;
    int a,b,p,x,k,y;
    int sum=0,d,den=0,f1=0;
    cin>>a>>b>>p>>x>>k>>y;
    cin>>n;
    for(i=1;i<=n;i++){
    cin>>d;den=den+1;
    if(d<=(b*a)&&den<k)sum=sum+0;
      if(d>(b*a)&&den<k){
          int m=d-(a*b);
          if (m/p<3){
            if(m%p==0)sum=sum+(m/p)*x;
            else {sum=sum+(m/p)*x+x;}}
            if(m/p==3){sum=sum+3*x;}
            else if (m/p>3){f1++;sum=sum+3*x;}}
      else if ((d>=a*b)&&(den==k)) {sum=sum+y;den=0;f1=0;}
      else if ((d<a*b)&&(den==k && f1!=0)) {sum=sum+y;den=0;f1=0;}
    else if ((d<a*b)&&(den==k && f1==0)) {sum=sum+0;den=0;f1=0;}}
    cout<<sum<<endl;
 return 0;
}

Ще съм Ви благодарен, ако ни помогнете :)

 

Тагове:
0
C++ Programming
RaUndreundre avatar RaUndreundre 54 Точки

В условието е казано " Вход: На първия ред на входа се въвеждат числата ..."
Примери:
Вход: 4 10 20 62 5 100
Т.е. предполагаме, че първите 6 елемента от входа трябва да са на един ред и да са разделени със шпация. Дали все пак е такъв замисъла на условието мога само да предполагам. Ако се абстрахираме от това условие и предположим, че входа се чете на отделни редове то ето моя код, който дава верен резултат с горния примерен вход:

#include <iostream>
using namespace std;
int main() {
    int maxCapParty, maxKids1, maxKids2, dayK, kidsForDay, numDays;
    double rentP, rentK, cost;

    cin >> maxCapParty >> maxKids1 >> maxKids2 >> rentP >> dayK >> rentK;
    cin >> numDays;
    int kidsForNexDay = 0;
    for (int i = 1; i <= numDays; i++) {
        int counter = 0;
        cin >> kidsForDay;
        kidsForDay += kidsForNexDay;
        if (kidsForDay > (maxCapParty * maxKids1)) {
            kidsForDay -= (maxCapParty * maxKids1);
            if (i != dayK && i != numDays) {
                while (kidsForDay > 0 && counter < 3) {
                    kidsForDay -= maxKids2;
                    cost += rentP;
                    counter++;
                }
                if (kidsForDay > 0) {
                    kidsForNexDay += kidsForDay;
                }
            } else if (kidsForDay > 0) {
                cost += rentK;
                kidsForNexDay = 0;
            }
        }
    }
    cout << cost << endl;
    return 0;
}

Ако все пак, на входа трябват 6 елемента на един ред, то този код трябва да се допише.
Поздрави!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.