Hex Artifact Content
Not logged in

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;..}.};.