Професионална програма
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 52 Точки

В условието е казано " Вход: На първия ред на входа се въвеждат числата ..."
Примери:
Вход: 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