পেয়ার ক্যাপাসিটারগুলি


12

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

এই চ্যালেঞ্জের লক্ষ্যটি হ'ল একাধিক (একাধিক) সক্ষমতা সেট করে ক্যাপাসিটরদের জোড়া দেওয়া যাতে প্রতিটি জোড়ের মোট ক্ষমতা একটি নির্দিষ্ট পরিসরে থাকে। আপনাকে জোড়া লাগানোর সর্বোত্তম সেটটিও খুঁজে বার করতে হবে, অর্থাৎ যতগুলি সম্ভব বেশি জোড়া পাওয়া যাবে এমন জুটিগুলির সেট।

সীমাবদ্ধতাসমূহ

  1. ইনপুট পছন্দ বিন্যাসে গঠিত
    • আপনার কাছে থাকা ক্যাপাসিটারগুলির (বহু) সেটটি উপস্থাপন করে এমন ক্যাপাসিটিগুলির একটি আনর্ডারড তালিকা
    • লক্ষ্য পরিসরের নীচের এবং উপরের সীমানাকে উপস্থাপন করে এমন একধরণের সক্ষমতা (অন্তর্ভুক্ত)
  2. ইনপুটটিতে সমস্ত ক্ষমতা হ'ল ধনাত্মক পূর্ণসংখ্যার পরিমাণ 2 30 এর কম হয় , ইউনিটটি পিএফ হয় (এটি যে বিষয়টি বিবেচ্য নয়))
  3. ইনপুটটিতে সক্ষমতাগুলির তালিকা ছাড়াও, আপনার থাকা ক্যাপাসিটারগুলির সেটটিতে 0 পিএফ এর মান সহ অসীম পরিমাণ ক্যাপাসিটার রয়েছে।
  4. আউটপুট পছন্দসই ফর্ম্যাটে সমন্বিত জোড়গুলির তালিকার তালিকার সমন্বয় করে যাতে প্রতিটি জোড়ার যোগফল নির্দিষ্ট লক্ষ্যমাত্রায় থাকে। জোড়ার ক্রম বা কোনও জোড়ার মধ্যে ক্ষমতার ক্রম নির্দিষ্ট করা হয়নি।
  5. আউটপুটে কোনও ক্ষমতা আপনার ক্যাপাসিটারের সেটের চেয়ে বেশি দেখা যায় । অন্য কথায়: আপনি যে জোড়গুলি আউটপুট করেন সেগুলি অবশ্যই ওভারল্যাপ হওয়া উচিত নয়।
  6. আপনার সম্ভাব্য আউটপুট সন্তুষ্টিজনক শর্তগুলি 4 এবং 5 হবে না যাতে আপনার প্রোগ্রামের আউটপুটের চেয়ে বেশি জোড়া সক্ষমতা থাকে।
  7. আপনার প্রোগ্রামটি ও ( এন !) সময়ে শেষ হবে যেখানে n তালিকার দৈর্ঘ্য আপনার ক্যাপাসিটারগুলির সেট উপস্থাপন করে
  8. লুফোলগুলি অপব্যবহার করা হবে না
  9. লক্ষ্য পরিসীমা খালি রাখা হইবে

স্কোরিং

আপনার স্কোর অক্টেটে আপনার সমাধানের দৈর্ঘ্য। যদি আপনার সমাধান কিছু কে-এর জন্য বহুপদী সময় O ( n কে ) এ সমস্যার সমাধান করতে পরিচালিত করে তবে আপনার স্কোরটি 10 ​​দ্বারা ভাগ করুন I এটি আসলে সম্ভব কিনা আমি জানি না।

নমুনা ইনপুট

  • 100 থেকে 100, ইনপুট অ্যারে 100 100 100, বৈধ আউটপুট:

    0 100
    0 100
    0 100
    
  • 100 থেকে 120, ইনপুট অ্যারে 20 80 100, বৈধ আউটপুট:

    0 100
    20 80
    

    আউটপুটটি 20 100বৈধ নয়

  • 90 থেকে 100 ব্যাপ্তি, ইনপুট অ্যারে 50 20 40 90 80 30 60 70 40, বৈধ আউটপুট:

    0 90
    20 80
    30 70
    40 60
    40 50
    
  • 90 থেকে 90 পরিসীমা, ইনপুট অ্যারে 20 30 40 40 50 60 70 80 90, বৈধ আউটপুট:

    0 90
    20 70
    30 60
    40 50
    
  • 90 থেকে 110 ব্যাপ্তি, ইনপুট অ্যারে 40 60 50, বৈধ আউটপুট:

    40 60
    

3
আমি মোটামুটি নিশ্চিত যে এটি ও (এন লগ এন) এ সহজেই সমাধান করা যায়। প্রথমে ব্যাপ্তির মধ্যে যে কোনও ক্যাপাসিটারকে 0 পিএফের সাথে যুক্ত করুন। বাকী বাছাই করুন। সর্বনিম্ন এবং সর্বোচ্চ ক্যাপাসিটারটি জুড়ুন, যদি এটি সীমা ছাড়িয়ে যায় তবে সর্বোচ্চটি বাতিল করুন, যদি এটি সর্বনিম্ন বাতিল হয় discard
orlp

1
কিছু ইনপুট / আউটপুট পরীক্ষা সুন্দর হবে।
orlp

@orlp আমি ইতিমধ্যে জিজ্ঞাসা করেছি, ওপি এটিতে কাজ করছে
বিটা ডিকায়

2
@ অরল্পের অ্যালগরিদম কাজ করে তবে তার প্রমাণটি কোনও মন্তব্যের জন্য দীর্ঘ ছায়া। সংক্ষেপে, একটি ন্যূনতম কাউন্টারেরেক্সামেলের অবশ্যই এমন হওয়া উচিত a <= b <= c <= dযা a + d, a + c, b + dসমস্ত পরিসরে থাকে তবে b + cতা নয়, তবে এটি একটি বৈপরীত্য দেয়।
পিটার টেলর

@orlp প্রদত্ত নমুনা ইনপুট কি আপনার পক্ষে দরকারী?
FUZxxl

উত্তর:


1

সিজেম, 5.6

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

l~_,0a*+${(\)@_2$+4$~2$\>{;;\;\+}{<{;+}{oSop}?}?_,1>}g;;

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

নমুনা ইনপুট:

[90 100] [50 20 40 90 80 30 60 70 40]

ব্যাখ্যা:

l~      Get and interpret input.
_,      Get length of resistor list.
0a*+    Append the same number of 0 values.
$       Sort the list.
{       Loop until less than 2 entries in list.
  (       Pop off first value.
  \)      Pop off last value.
  @_      Pull first value to top, and copy it.
  2$      Copy last value to top.
  +       Add first and last value.
  4$~     Copy specified range to top, and unwrap the two values.
  2$      Copy sum to top.
  \>      Swap and compare for sum to be higher than top of range.
  {       It's higher.
    ;;\;    Some stack cleanup.
    \+      Put first value back to start of resistor list.
  }
  {       Not higher, so two cases left: value is in range, or lower.
    <       Compare if sum is lower than bottom of range.
    {       It's lower.
      ;+      Clean up stack and put last value back to end of resistor list.
    }
    {       Inside range, time to produce some output.
      o       Output first value.
      So      Output space.
      p       Output second value and newline.
    }?      Ternary operator for comparison with lower limit.
  }?      Ternary operator for comparison with upper limit.
  _,      Get length of remaining resistor list.
  1>      Check if greater 1.
}g      End of while loop for processing resistor list.
;;      Clean up stack, output was generated on the fly.

আপনার ভাষার জন্য আরও উপযুক্ত হওয়ার জন্য আপনি আউটপুট ফর্ম্যাটটিকে পরিবর্তন করতে পারেন। আউটপুটটির সঠিক বিন্যাস নির্দিষ্ট করা হয়নি, কেবল আপনার আউটপুট দিতে হবে data
FUZxxl

6

পাইথন 2, 11.5

একবারের জন্য পাইথন গল্ফ:

(a,b),l=input()
l=[0]*len(l)+sorted(l)
while l:
 e=l[0]+l[-1]
 if a<=e<=b:print l[0],l[-1]
 l=l[e<=b:len(l)-(a<=e)]

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

ইনপুট / আউটপুট উদাহরণ:

[[90,100], [20,30,40,40,50,60,70,80,90]]

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