Artifact aea0e2196df4be28223f713d71c2cd6b490a69a5:
0000: 23 69 6e 63 6c 75 64 65 20 3c 76 65 63 74 6f 72 #include <vector
0010: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 >.#include <stri
0020: 6e 67 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 73 ng>.#include <ss
0030: 74 72 65 61 6d 3e 0a 23 69 6e 63 6c 75 64 65 20 tream>.#include
0040: 3c 63 73 74 64 6c 69 62 3e 0a 75 73 69 6e 67 20 <cstdlib>.using
0050: 6e 61 6d 65 73 70 61 63 65 20 73 74 64 3b 0a 0a namespace std;..
0060: 73 74 72 75 63 74 20 56 65 6e 64 69 6e 67 4d 61 struct VendingMa
0070: 63 68 69 6e 65 0a 7b 0a 09 69 6e 74 20 6d 6f 74 chine.{..int mot
0080: 6f 72 55 73 65 28 76 65 63 74 6f 72 3c 73 74 72 orUse(vector<str
0090: 69 6e 67 3e 20 70 72 69 63 65 73 2c 20 76 65 63 ing> prices, vec
00a0: 74 6f 72 3c 73 74 72 69 6e 67 3e 20 70 75 72 63 tor<string> purc
00b0: 68 61 73 65 73 29 0a 09 7b 0a 09 09 76 65 63 74 hases)..{...vect
00c0: 6f 72 3c 69 6e 74 3e 20 20 20 20 20 20 20 20 20 or<int>
00d0: 20 20 73 75 6d 3b 0a 09 09 76 65 63 74 6f 72 3c sum;...vector<
00e0: 20 76 65 63 74 6f 72 3c 69 6e 74 3e 20 3e 20 70 vector<int> > p
00f0: 72 69 28 70 72 69 63 65 73 2e 73 69 7a 65 28 29 ri(prices.size()
0100: 29 3b 0a 09 09 66 6f 72 28 69 6e 74 20 69 3d 30 );...for(int i=0
0110: 3b 20 69 3c 70 72 69 63 65 73 2e 73 69 7a 65 28 ; i<prices.size(
0120: 29 3b 20 2b 2b 69 29 0a 09 09 7b 0a 09 09 09 73 ); ++i)...{....s
0130: 74 72 69 6e 67 73 74 72 65 61 6d 20 73 69 6e 28 tringstream sin(
0140: 70 72 69 63 65 73 5b 69 5d 29 3b 0a 09 09 09 66 prices[i]);....f
0150: 6f 72 28 69 6e 74 20 6a 3d 30 2c 6e 3b 20 73 69 or(int j=0,n; si
0160: 6e 3e 3e 6e 3b 20 2b 2b 6a 29 0a 09 09 09 09 7b n>>n; ++j).....{
0170: 69 66 28 6a 3e 3d 73 75 6d 2e 73 69 7a 65 28 29 if(j>=sum.size()
0180: 29 73 75 6d 2e 70 75 73 68 5f 62 61 63 6b 28 30 )sum.push_back(0
0190: 29 3b 20 73 75 6d 5b 6a 5d 2b 3d 6e 3b 20 70 72 ); sum[j]+=n; pr
01a0: 69 5b 69 5d 2e 70 75 73 68 5f 62 61 63 6b 28 6e i[i].push_back(n
01b0: 29 3b 7d 0a 09 09 7d 0a 09 09 69 6e 74 20 4d 20 );}...}...int M
01c0: 3d 20 70 72 69 5b 30 5d 2e 73 69 7a 65 28 29 3b = pri[0].size();
01d0: 0a 0a 09 09 69 6e 74 20 6d 6f 74 20 3d 20 30 3b ....int mot = 0;
01e0: 0a 09 09 69 6e 74 20 70 63 3d 30 2c 20 70 74 3d ...int pc=0, pt=
01f0: 2d 35 3b 0a 09 09 66 6f 72 28 69 6e 74 20 69 3d -5;...for(int i=
0200: 30 3b 20 69 3c 70 75 72 63 68 61 73 65 73 2e 73 0; i<purchases.s
0210: 69 7a 65 28 29 3b 20 2b 2b 69 29 0a 09 09 7b 0a ize(); ++i)...{.
0220: 09 09 09 73 74 72 69 6e 67 73 74 72 65 61 6d 20 ...stringstream
0230: 73 69 6e 28 70 75 72 63 68 61 73 65 73 5b 69 5d sin(purchases[i]
0240: 29 3b 0a 09 09 09 73 74 72 69 6e 67 20 61 3b 20 );....string a;
0250: 67 65 74 6c 69 6e 65 28 73 69 6e 2c 61 2c 27 2c getline(sin,a,',
0260: 27 29 3b 0a 09 09 09 73 74 72 69 6e 67 20 62 3b ');....string b;
0270: 20 67 65 74 6c 69 6e 65 28 73 69 6e 2c 62 2c 27 getline(sin,b,'
0280: 3a 27 29 3b 0a 09 09 09 73 74 72 69 6e 67 20 63 :');....string c
0290: 3b 20 67 65 74 6c 69 6e 65 28 73 69 6e 2c 63 29 ; getline(sin,c)
02a0: 3b 0a 09 09 09 69 6e 74 20 73 68 20 3d 20 61 74 ;....int sh = at
02b0: 6f 69 28 61 2e 63 5f 73 74 72 28 29 29 3b 0a 09 oi(a.c_str());..
02c0: 09 09 69 6e 74 20 63 6c 20 3d 20 61 74 6f 69 28 ..int cl = atoi(
02d0: 62 2e 63 5f 73 74 72 28 29 29 3b 0a 09 09 09 69 b.c_str());....i
02e0: 6e 74 20 20 74 20 3d 20 61 74 6f 69 28 63 2e 63 nt t = atoi(c.c
02f0: 5f 73 74 72 28 29 29 3b 0a 0a 09 09 09 69 66 28 _str());.....if(
0300: 20 70 72 69 5b 73 68 5d 5b 63 6c 5d 20 3d 3d 20 pri[sh][cl] ==
0310: 30 20 29 0a 09 09 09 09 72 65 74 75 72 6e 20 2d 0 ).....return -
0320: 31 3b 0a 0a 09 09 09 69 66 28 20 74 2d 70 74 20 1;.....if( t-pt
0330: 3e 3d 20 35 20 29 0a 09 09 09 7b 0a 09 09 09 09 >= 5 )....{.....
0340: 2f 2f 20 72 6f 74 61 74 65 0a 09 09 09 09 69 6e // rotate.....in
0350: 74 20 68 63 20 3d 20 6d 61 78 5f 65 6c 65 6d 65 t hc = max_eleme
0360: 6e 74 28 73 75 6d 2e 62 65 67 69 6e 28 29 2c 20 nt(sum.begin(),
0370: 73 75 6d 2e 65 6e 64 28 29 29 20 2d 20 73 75 6d sum.end()) - sum
0380: 2e 62 65 67 69 6e 28 29 3b 0a 09 09 09 09 6d 6f .begin();.....mo
0390: 74 20 2b 3d 20 6d 69 6e 28 20 61 62 73 28 68 63 t += min( abs(hc
03a0: 2d 70 63 29 2c 20 4d 2d 61 62 73 28 68 63 2d 70 -pc), M-abs(hc-p
03b0: 63 29 20 29 3b 0a 09 09 09 09 70 63 20 3d 20 68 c) );.....pc = h
03c0: 63 3b 0a 09 09 09 7d 0a 0a 09 09 09 2f 2f 20 62 c;....}.....// b
03d0: 75 79 0a 09 09 09 73 75 6d 5b 63 6c 5d 20 20 20 uy....sum[cl]
03e0: 20 2d 3d 20 70 72 69 5b 73 68 5d 5b 63 6c 5d 3b -= pri[sh][cl];
03f0: 0a 09 09 09 70 72 69 5b 73 68 5d 5b 63 6c 5d 20 ....pri[sh][cl]
0400: 3d 20 30 3b 0a 09 09 09 6d 6f 74 20 2b 3d 20 6d = 0;....mot += m
0410: 69 6e 28 20 61 62 73 28 63 6c 2d 70 63 29 2c 20 in( abs(cl-pc),
0420: 4d 2d 61 62 73 28 63 6c 2d 70 63 29 20 29 3b 0a M-abs(cl-pc) );.
0430: 09 09 09 70 63 20 3d 20 63 6c 3b 0a 09 09 09 70 ...pc = cl;....p
0440: 74 20 3d 20 74 3b 0a 09 09 7d 0a 0a 09 09 2f 2f t = t;...}....//
0450: 20 72 6f 74 61 74 65 0a 09 09 69 6e 74 20 68 63 rotate...int hc
0460: 20 3d 20 6d 61 78 5f 65 6c 65 6d 65 6e 74 28 73 = max_element(s
0470: 75 6d 2e 62 65 67 69 6e 28 29 2c 20 73 75 6d 2e um.begin(), sum.
0480: 65 6e 64 28 29 29 20 2d 20 73 75 6d 2e 62 65 67 end()) - sum.beg
0490: 69 6e 28 29 3b 0a 09 09 6d 6f 74 20 2b 3d 20 6d in();...mot += m
04a0: 69 6e 28 20 61 62 73 28 68 63 2d 70 63 29 2c 20 in( abs(hc-pc),
04b0: 4d 2d 61 62 73 28 68 63 2d 70 63 29 20 29 3b 0a M-abs(hc-pc) );.
04c0: 09 09 70 63 20 3d 20 68 63 3b 0a 0a 09 09 72 65 ..pc = hc;....re
04d0: 74 75 72 6e 20 6d 6f 74 3b 0a 09 7d 0a 7d 3b 0a turn mot;..}.};.