2017-09-08 6 views
-6

Problemstellung:
Sachin mag Süßigkeiten viel. Also geht er auf einen Süßwarenmarkt. Es gibt eine Reihe von süßen Ständen. Jeder süße Stall hat verschiedene Süßigkeiten. Um etwas Zeit zu sparen, entschloss er sich, Süßigkeiten aus angrenzenden Ständen zu kaufen. Also kann er von so vielen Ständen kaufen, wie er will, aber alle diese Stände müssen zusammenhängend sein. Er entschied sich auch, nur 1 kg Süßigkeiten von jedem dieser Stände zu kaufen. Die Kosten für 1 kg Süßigkeiten für jeden Stand sind angegeben. Auf diesem Markt gibt es eine seltsame Abrechnungsregel. Und diese Regel ist wie folgt: Die Gesamtkosten aller gekauften Süßigkeiten sind die Summe der Kosten aller Süßigkeiten, multipliziert mit den Kosten für Süßigkeiten, die er am Ende gekauft hat. z.B. wenn er Süßigkeiten kauft, die 2, 3, 4 in der gleichen Reihenfolge als Gesamtkosten der Bonbons kosten, ist 2 * 4 + 3 * 4 + 4 * 4 = 36. Jetzt fragt er sich, wie hoch die Gesamtkosten aller möglichen Arten, Süßigkeiten zu kaufen, sein werden. Kannst du ihm helfen. Weil diese Zahl groß sein könnte, sollten Sie Modulo des Endergebnisses um 10^9 + 7 nehmen.
Beispiele
Beispieltestfall 1-Warum bekomme ich Fehler

Input 
    3 
    1 
    2 
    3 

    Output 
    53 

    Explanation 
    Possible ways of buying sweets are- 
    a) 1 
    b) 1 2 
    c) 2 
    d) 1 2 3 
    e) 2 3 
    f) 3 
    cost of each of these is following- 
    a) 1*1= 1 
    b) 1*2+2*2= 6 
    c) 2*2= 4 
    d) 1*3+2*3+3*3= 18 
    e) 2*3+3*3= 15 
    f) 3*3= 9 

löste ich dieses Problem mit diesem Code, ich bin immer noch 0 in Konkurrenz bekommen :(

import sys 
    import os 


    def possibleways(input1): 
     t1 = [] 
     s = 0 
     big_num = 10**9 + 7 
     for i in range(len(input1)): 
      for j in range(i + 1, len(input1) + 1): 
       l1 = [] 
       for k in range(i, j): 
        l1.append(input1[k]) 
       t1.append(l1) 
     # print(t1) 
     for x in t1: 
      last_element = x[-1] 
      # print("last_element", last_element) 
      s += (sum(x) * last_element) % big_num 
      # print(s) 
     return s % big_num 
     # return ts 


    ip1_cnt = 0 
    ip1_cnt = int(input()) 
    ip1_i = 0 
    ip1 = [] 
    while ip1_i < ip1_cnt: 
     ip1_item = int(input()) 
     ip1.append(ip1_item) 
     ip1_i += 1 

    output = possibleways(ip1) 
    print(str(output)) 

Bitte mir helfen, den Fehler, ich bin zu finden tun

+0

Ihre Subset-Konstruktion ist zu langsam und verbraucht immense Speichermengen. (Die Eingabe kann 100.000 Zahlen sein.) – molbdnilo

+0

@molbdnilo Wie kann ich optimieren? Kannst du mich bitte führen? –

Antwort

0

Von dem, was ich verstehe:
sagen wir, die Preise sind a, b und c
jetzt nehmen wir an, dass der Gesamtpreis aller Produkte "x"
ist, was bedeutet, dass die Nummer, die Sie suchen, "ax + bx + cx" ist, da dies das Produkt der möglichen Preise ist, die gleich ist (a + b + c) x => x * x Wenn du also eine Liste mit Zahlen erhältst, musst du sie nur zusammenfassen und dann bekommst du "x" dann kennst du den Rest, nein?

0

Das Problem kann vereinfacht werden, wenn Sie vom letzten Stand rückwärts arbeiten. Betrachten Sie den folgenden Code ein:

import itertools 

test = [3,1,2,3] 

cum_cost = 0 

for num_visits in range(1,len(test)+1): 
    print('Number of Visits: ',num_visits) 
    for end_stall in test: 
     print('\tEnd Stall',end_stall) 
     remaining_stalls = test[:] 
     remaining_stalls.remove(end_stall) 
     visits_left = num_visits - 1 
     stalls_left = len(remaining_stalls) 
     perms = itertools.permutations(remaining_stalls,visits_left) 
     perms1, perms2 = itertools.tee(perms) 
     p = [perm for perm in perms1] 
     s = sum([sum(perm)+end_stall for perm in perms2])*end_stall 
     print('\t\tVisits left',visits_left) 
     print('\t\tStalls left',stalls_left) 
     print('\t\tpermutations',p) 
     print('\t\tSum',s,' Running Sum',cum_cost) 
     cum_cost+=s 
    print('\n') 
print('Grand Total',cum_cost) 

Durch die ‚letzte Stall‘ zu entfernen (wie wir arbeiten nach hinten) wir alle möglichen Kombinationen der Teilnahme an den anderen Ständen finden. Wir können dann die Kosten für jede von denen berechnen und sie zu einer laufenden Summe hinzufügen.

0
int possibleways(int input1_size,int *input1) 
{ 

    unsigned int pow_set_size = pow(2, input1_size); 
    int counter, j; 

    for(counter = 0; counter < pow_set_size; counter++) 
    { 
     for(j = 0; j < set_size; j++) 
     { 
      /* Check if jth bit in the counter is set 
      If set then pront jth element from set */ 
      if(counter & (1<<j)) 
      printf("%d", input1[j]); 
     } 
     printf("\n"); 
    } 
} 


// I wrote this code it showed the output still , I got 0 in exam competition. 
0

Mein Code wird Ihr Problem lösen und es ist nicht so groß. (python ver 3.6.2)

length = int(input()) 
if (length >=1 and length <= 10^5): 
    shop = list(map(int, input().strip())) 
Sum = 0 
flag = len(shop) 
while (flag != 0): 
    for i in range(len(shop),0,-1): 
     Shop = shop[i-1:] 
     l= len(Shop) 
     for _ in Shop: 
      Sum = Sum + _*Shop[l-1] 
    shop.pop() 
    flag = len(shop) 
print(Sum) 
Verwandte Themen