খেলনা দোকান লাভ


15

গল্পটি

"২০১?? ঠিক আছে," খেলনা বিক্রেতা হিলবার্টকে বকবক করেছে। সে চোখ খুলল, তার কানের থেকে সালাদ ড্রেসিং ট্রিকলিং মুছল এবং সকালের কিক-স্টার্ট ক্রেমিশনিট খেয়ে ফেলল। উদাহরণ ছুটির দিন। তাকে এখনই কাজ করতে হবে এবং বছরের হিসাব শেষ করতে হবে।

ক্রিসমাস বিশেষত তার বিক্রয়ের জন্য বছরের একটি খুব ফলনকালীন সময়। হিলবার্ট ঠিক কীভাবে এটি কাজ করে তা জানেন: একজন ব্যক্তি একটি দোকানে এসে তাদের দেওয়া প্রথম উপহার কিনে। তারা এর জন্য অর্থ প্রদান করে এবং অন্য দোকানে চলে যায়। বাস্তবে, উপহারটি আসলে কী তা আসলে কোনও পার্থক্য করে না। দামটিও অপ্রাসঙ্গিক, শর্ত থাকে যে এটি খুব বেশি না হয়। এটি সমস্ত ক্রিসমাস পর্যন্ত অবশিষ্ট সময় নির্ভর করে - সময় যত কম হয়, গ্রাহকদের অনুশোচনা তত বেশি হয়, তারা যে পরিমাণ মূল্য দিতে আগ্রহী হয়।

হিলবার্টের জন্য তার ঘড়িটি দেখার জন্য যা দরকার তা হ'ল - এবং তার গ্রাহকরা কতটা ব্যয় করতে পারবেন তা এখনই তিনি জানেন। তিনি সহজেই এই সত্যটির সুবিধা নিতে পারেন: তিনি কেবলমাত্র প্রদত্ত গ্রাহকের কাছে বিক্রয় করতে পারেন এমন সবচেয়ে ব্যয়বহুল উপহারটি খুঁজে পান এবং তাদের কাছে এটি অফার করেন। কেবল এখন তিনি বুঝতে পেরেছেন যে তিনি গত বছর এই ধূর্ত কৌশলটি নিয়োগ করতে ভুলে গিয়েছিলেন। যদিও এটি পরিবর্তন হবে!

তবুও, হিলবার্ট জানতে চান তার ব্যবসায় কতটা প্রসার লাভ করেছে, যদি তিনি বাস্তবে তাঁর মহাপরিকল্পনাটি ব্যবহার করে থাকেন। তিনি তার দোকানে আসা লোকদের একটি তালিকা একসাথে রাখতে পেরেছেন, তবে তিনি নিশ্চিত হন না যে সেগুলি কী পরিমাণ অর্থ উপার্জন করতে পারে।

আপনার কাজ (টিএল; ডিআর)

ইনপুট হল একটি নিয়ে গঠিত আরোহী প্রাপ্তিসাধ্য উপহার দাম তালিকা এবং গ্রাহকদের বাজেটের একটি তালিকা। বাজেটের তালিকাটি গ্রাহকরা দোকানে আসার সাথে সাথে একই ক্রমে রয়েছে - এই শর্ত সহ যে প্রতিটি গ্রাহক কমপক্ষে আগেরটির তুলনায় কম পরিমাণে অর্থ প্রদান করতে ইচ্ছুক, অর্থ এটি আরোহীও।

প্রতিটি গ্রাহকের জন্য, তারা যে অর্থ ব্যয় করতে ইচ্ছুক সবচেয়ে দামি উপহার এবং এটির দাম নির্ধারণ করুন। বাজেটের মধ্যে কোনও উপহার পাওয়া না গেলে আউটপুট এ 0

আপনি একটি -40%অক্ষর বোনাস পান, যদি আপনার অ্যালগোরিদমের অ্যাসিম্পটিক সময় জটিলতা হয় O(n+m)(তুচ্ছ নয় O(n*m)) ইনপুট তালিকার দৈর্ঘ্য কোথায় হয় n, mare

এটি , সংক্ষিপ্ততম বাইট জেতা। স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।

উদাহরণ

ইনপুট:

1 2 2 2 5 7 10 20
1 1 2 3 6 6 15 21 21 22

আউটপুট:

1 0 2 2 5 2 10 20 7 0

এই কাজটি স্থানীয় প্রোগ্রামিং প্রতিযোগিতা থেকে নেওয়া হয়েছিল এবং আমার দ্বারা ইংরেজী অনুবাদ করা হয়েছিল। এখানে আসল অ্যাসাইনমেন্টটি দেওয়া হয়েছে: https://www.ksp.sk/ulohy/zadania/1131/


9
বোনাসেস এক জিনিস যখন চ্যালেঞ্জ লেখা এড়াতে হয় । তবে আমি মনে করি এটি এখানে ঠিক আছে। যদি আপনি এটি রাখতে চান তবে আমি এটি শতাংশের ভিত্তিক বোনাসে পরিবর্তন করার পরামর্শ দিচ্ছি। একটি 20 অক্ষরের বোনাস জাভা জমা দেওয়ার কোনও অর্থ নয়, তবে গল্ফিং ভাষায় সমাধানের জন্য মূলত বাধ্যতামূলক।
ডেনকার

আমি একা ব্যাকস্টোরির জন্য ওপিকে একটি অনুদান প্রদান করতে পারি? সত্যিই, যে আমাকে হাসিয়ে তোলে; প্রতিটি চ্যালেঞ্জের মধ্যে একটির প্রয়োজন।
বিড়াল

@ ট্যাক ধন্যবাদ, তবে নীচে ছোট পাঠ্যে যেমন উল্লেখ করা হয়েছে, আমি আসলে ব্যাকস্টোরিটি তৈরি করিনি - আমি কেবল এটি অনুবাদ করেছি।
সাম্মকো

@ সাম্মকো হ্যাঁ, আমি এটি দেখেছি, তবে আমার উপরের মন্তব্যটি এখনও ধরে রেখেছে :)
বিড়াল

উত্তর:


5

পাইথ, 17 16 বাইট

1 বাইট Pietu1998 ধন্যবাদ

VE=.-Q]
e|fgNTQ0

প্রদর্শন

ব্যাখ্যা:

VE=.-Q]<\n>e|fgNTQ0
                        Implicit: Q is the list of prices.
VE                      For N in the list of budgets
             f   Q      Filter the list of prices
              gNT       On the current person's budget being >= that price
            |     0     If there aren't any, use 0 instead.
          e             Take the last (most expensive) value.
      <\n>              Print it out.
  =.-Q                  Remove it from the list of prices.

আমি মনে করি আপনি by VE=.-Q]n দিয়ে 1 বাইট সংরক্ষণ করতে পারবেন e|fgNTQ0। মূলত একই জিনিস কিন্তু একটি লুপ সঙ্গে।
পুর্কাকুডারী

4

হাস্কেল, 67 বাইট

a#(b:c)|(h,t)<-span(<=b)a=last(0:h):(init(h++[0|h==[]])++t)#c
_#x=x

ব্যবহারের উদাহরণ: [1,2,2,2,5,7,10,20] # [1,1,2,3,6,6,15,21,21,22]-> [1,0,2,2,5,2,10,20,7,0]

দামগুলি দুটি ভাগে বিভক্ত করুন: সমস্ত দাম (h,t)কোথায় h<= পরবর্তী গ্রাহকের বাজেট এবং tঅন্য সবগুলি। শেষ hদামটি নিন এবং hপ্লাসের শেষ tএবং বাকী বাজেটের ব্যতীত সমস্তটি দিয়ে পুনরাবৃত্তভাবে চালিয়ে যান । খালি হলে last(0:h)মূল্যায়ন করে । অনুরূপ: খালি থাকলে একটি ডামি উপাদান যুক্ত করে , যাতে এর কিছু ড্রপ থাকে ( খালি তালিকায় ব্যর্থ হয়)।0hinit (h++[0|h==[]]) ++ t0hhinitinit


3

জাভা, 154 * 0.6 = 92.4 বাইট

-13 বাইট কারণ ল্যাম্বদা আসলে ব্যবহার করতে পারে int[], নয় Integer[](ধন্যবাদ বুঞ্জিও বিয়ানকো )

এটিতে ও (এন + মি) সময় এবং ও (এন + মি) অতিরিক্ত স্থান নেওয়া উচিত (ধরে নিলাম আমি বড় হে স্বীকৃতি বুঝি)

g->b->{int l=g.length,L=b.length,G=0,B=0,A=0;int[]a=new int[l],s=new int[L];for(;B<L;){while(G<l&&g[G]<=b[B])a[A++]=g[G++];s[B++]=A>0?a[--A]:0;}return s;}

ইন্ডেন্টেড: ( অনলাইনে চেষ্টা করে দেখুন! )

static int[] toyStore(int[]g,int[]b) {
    int gl=g.length,bl=b.length,gp=0,bp=0,ap=0;
    int[] a=new int[gl],s=new int[bl];
    for (;bp<bl;) {
        while(gp<gl&&g[gp]<=b[bp])a[ap++]=g[gp++];
        s[bp++]=ap>0?a[--ap]:0;
    }
    return s;
}

public static void main(String[] args)
{
    System.out.println(Arrays.toString(
        toyStore(new int[] {1,2,2,2,5,7,10,20},
                 new int[] {1,1,2,3,6,6,15,21,21,22})
        ));
}

আমি এখানে অ-ল্যাম্বদা প্রসারণটি দেখাই কারণ প্রকারের ঘোষণাটি পরিষ্কার এবং এটি ঠিক একই যুক্তি। ল্যাম্বদা আদর্শ লিঙ্কে উপস্থিত রয়েছে।

ব্যাখ্যা:

চলকগুলি ব্যবহৃত:

  • gউপহারের তালিকার তালিকাটি bহ'ল বাজেটের তালিকা।
  • glদৈর্ঘ্য gএবং blদৈর্ঘ্য হয় b
  • aসাশ্রয়ী মূল্যের উপহারের জন্য একটি স্ট্যাক s, বিক্রি হওয়া উপহারের আউটপুট অ্যারে।
  • gp, bp, এবং apজন্য পয়েন্টার হয় g, bএবং aযথাক্রমে। bpএর জন্য পয়েন্টারও s

অ্যালগরিদম:

  • বাজেটের দৈর্ঘ্যের প্রতিটি বাজেটের জন্য
    • যদিও এই বাজেটে উপহারটি কিনতে পারেন g[gp]
      • স্ট্যাক aএবং ইনক্রিমেন্টে বাজেট পুশ করুনgp
    • উপরের পপ aমধ্যে s[bp]যদি উপস্থিত থাকে, অন্য করা 0

আপনি লাম্বা তরকারী করতে পারবেন না? (অর্থাত (g,b)->করতে g->b->?
হওয়া ASCII শুধুমাত্র

স্পষ্টতই, প্রত্যেকে হ্যাঁ, কিছু কারণে এটি আমার পক্ষে আগে কখনও কাজ করেনি তবে এখন তা হবে। 0.o (আপনি বোনাসের পরে 0.6 বাইট সংরক্ষণ করেছেন))
CAD97

ইনপুটটি দীর্ঘ বলে ধরে নেওয়া হলে আপনি কিছুটা বাইট সংরক্ষণ করতে পারেন [] (আপনাকে 158 বাইটে নিয়ে যায়) - আদর্শ one.com/invHlc
বুঞ্জিকোবিয়ানকো 29:58

1
@ বুঞ্জিও বিয়ানকো বাস্তবে আমি কেবল ইনট ব্যবহার করতে পারি []। কিছু কারণে আমি এই ধারণাটির মধ্যে ছিলাম যেহেতু প্রকারের আর্গুমেন্টগুলি রেফারেন্স প্রকারগুলি গ্রহণ করে (সুতরাং মান টাইপ করা আদিমগুলি পছন্দ করে না int) যে কারণে আমার রেফারেন্স ধরণের অ্যারে ব্যবহার করা দরকার। তবে আমি ঠিক পরিমাণে ইন্টের অ্যারে ব্যবহার করতে পারি। আমি একবার সুযোগ পেলে আপডেট করব।
CAD97

@ CAD97 হা! বিশ্বাস করতে পারি না আমি সেই লিঙ্কটি তৈরি করিনি ...
বুঞ্জিউ বিয়ানো

2

হাস্কেল, 87 * 0.6 = 52.2 বাইট

g s(p:q)d@(b:c)|p<=b=g(p:s)q d
g[]p(b:c)=0:g[]p c
g(s:t)p(b:c)=s:g t p c
g _ _ _=[]
g[]

আমার অন্যান্য উত্তর থেকে সম্পূর্ণ আলাদা , কারণ আমি বোনাসের জন্য যাচ্ছি।

শেষ লাইনটি (-> g[]) সংজ্ঞাটির অংশ নয়, তবে ওভারহেডকে কল করছে। ব্যবহারের উদাহরণ: g [] [1,2,2,2,5,7,10,20] [1,1,2,3,6,6,15,21,21,22]-> [1,0,2,2,5,2,10,20,7,0]

মূলত একইভাবে কাজ করে @ CAD97 এর উত্তর , অর্থাত্ ক্রয়যোগ্য আইটেমগুলির উপর নজর রাখতে একটি (প্রাথমিকভাবে খালি) সহায়ক সহায়ক ব্যবহার করুন। বিস্তারিত: ক্রম চেক করুন:

  • প্রথম বাজেটের তুলনায় প্রথম দাম কম বা সমান হলে দামটিকে স্ট্যাকের দিকে সরিয়ে দিন। আবার ফোন করুন।
  • যদি স্ট্যাকটি খালি থাকে, বাজেট বাদ পড়ে একটি পুনরাবৃত্ত কলের পরে 0 প্রদান করুন।
  • যদি স্ট্যাক এবং বাজেটের উভয় তালিকা খালি না থাকে তবে স্ট্যাকের শীর্ষে ফিরে আসুন স্ট্যাক এবং বাজেটের পপডের সাথে পুনরাবৃত্ত কল by
  • অন্যথায় খালি তালিকাটি ফিরিয়ে দিন।

এটি m+nসময়ের সাথে কাজ করে , কারণ ক) সহায়ক স্ট্যাকের ক্রিয়াকলাপ ধ্রুবক সময় এবং খ ব্যবহার করে) প্রতিটি পুনরাবৃত্ত কলগুলিতে তালিকাগুলির একটিতে একটি উপাদান দ্বারা সংক্ষিপ্ত করা হয়।


2

জেলি , 15 বাইট

ṀṄ;©®œ^
Rf@€ç/Ṁ

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

ṀṄ;©®œ^  Helper link. Arguments: G, H (lists of affordable gifts)

Ṁ        Compute the maximum of G (0 if the list is empty).
 Ṅ       Print it.
  ; ®    Concatenate it with the register (initially 0).
   ©     Save the result in the register.
     œ^  Compute the multiset symmetric difference of the updated register and H.

Rf@€ç/Ṁ  Main link. Arguments: B (budgets), P (prices)

R        Range; replace each t in B with [1, ..., t].
 f@€     Intersect the list of prices with each budget range, obtaining, for each
         customer, the list of all gifts he's willing to pay for.
    ç/   Reduce the array of lists by the helper link.
         In each iteration, this computes and prints the most expensive gift for
         a customer, than removes the selected gift (and all previously
         selected gifts) from the next list.
      Ṁ  Compute the maximum of the resulting list, which corresponds to the last
         customer.

1

জাভাস্ক্রিপ্ট, 85 * 0.6 = 51 বাইট

f=(a,b,s=[],[t,...u]=a,[v,...w]=b)=>v?t<=v?f(u,b,[...s,t]):[s.pop()|0,...f(a),w,s)]:[]

@ CAD97 এর উত্তরের আর একটি ক্লোন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.