সর্বাধিক পূর্ণসংখ্যার বিরতি প্রসারিত করুন


14

মনে করুন আপনাকে পূর্ণসংখ্যার আন্তঃ ছেদ করার জন্য একটি সেট দেওয়া হয়েছে [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]। (যেখানে [a,b]পূর্ণসংখ্যার সেটটি বৃহত্তর বা সমান aএবং এর চেয়ে কম বা সমান is b)

সূচিতে ব্যবধান Xজুড়ে bX - aX + 1মান। আমরা এই নাম্বারে কল করব cX

দেওয়া হয়েছে যে প্রতিটি বিরতি হয় ...

  • অপরিবর্তিত (যেমন থাকে [aX,bX]),
  • +সংখ্যার পাশের দিকে ডানদিকে প্রসারিত cX(হয়ে [aX,bX + cX]),
  • বা -লাইন সংখ্যার পাশের দিকে বাম দিকে প্রসারিত cXহয়ে (হয়ে [aX - cX,bX]),

সমস্ত আপডেট হওয়া অন্তরগুলির ইউনিয়ন দ্বারা আচ্ছাদিত সর্বাধিক সংখ্যার মানটি কী, যেগুলি এখনও সমস্ত আন্তঃ ছেদ করা ছাড়াই?

কোনও ফাংশন বা প্রোগ্রাম লিখুন যা ফর্মের একটি স্ট্রিং নেয় [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]এবং এটি সর্বাধিক গণনা করে। কোনও ফাংশন লিখলে মানটি ফিরিয়ে দিন। যদি একটি পূর্ণ প্রোগ্রাম লিখতে থাকে তবে ইনপুটটির জন্য স্টিডিন ব্যবহার করুন এবং স্ট্যাডআউটের মানটি মুদ্রণ করুন (বা নিকটতম বিকল্পগুলি ব্যবহার করুন)।

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

বাইটস মধ্যে সংক্ষিপ্ততম জমা জয়।

উদাহরণ

যদি ইনপুট থাকে [-3,0],[1,2],[4,9]তবে আউটপুটটি 22 হত The মধ্যবর্তী ব্যবধানটি কোনওভাবেই প্রসারিত করার কোনও জায়গা নেই তাই এটি অপরিবর্তিত থাকতে হবে। বাম এবং ডান অন্তর দুটি যথাক্রমে [-7,0]এবং পর্যন্ত বাড়ানো যেতে পারে [4,15]। ইউনিয়ন [-7,0]এবং [1,2]এবং [4,15]3. 22 মান যে ব্যতীত থেকে -7 থেকে 15 সব মূল্যবোধ, ধারণ করে।


3
আমরা কি আমাদের ভাষার অ্যারেগুলির স্থানীয় স্ট্রিং উপস্থাপনাটি ইনপুটটির জন্য ব্যবহার করতে পারি, বা এটি কি ঠিক এই বিন্যাসে থাকতে হবে?
মার্টিন এেন্ডার

@ মার্টিনব্যাটনার ন। আপনার এই সঠিক ফর্ম্যাটটি ব্যবহার করা দরকার। (আমি জানি দ্বিগুণ তরোয়াল ধরণের মত তবে এটি যেভাবে চলবে তাই করে ts)
ক্যালভিনের

আপনি উভয় পক্ষের একটি প্রদত্ত বিরতি প্রসারিত করতে পারেন? উদাহরণস্বরূপ, (6 টির উত্তরের জন্য) [5,6]হয়ে উঠতে পারে [3,8], বা এটি ন্যায়সঙ্গত [5,8]বা [3,6](4 টির উত্তরের জন্য) হতে পারে?
এমটিএনভিউমার্ক

@ ম্যাটনভিউমার্ক নং। সেগুলি কেবল এক দিক থেকে বাড়ানো যেতে পারে (বা মোটেও নয়)
ক্যালভিনের

উত্তর:


4

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

import Data.List
x=maximum.map length.filter(nub>>=(==)).map concat.sequence.map(\[a,b]->[[2*a-b-1..b],[a..b],[a..2*b-a+1]]).read.('[':).(++"]")

নমুনা রান:

λ: x ""
0

λ: x "[5,6]"
4

λ: x "[-3,0],[1,2],[4,9]"
22

1

আর, 282 278 269 247

এটি সত্যিই দ্রুত স্ট্রিং ইনপুট নিয়ে কাজ করছে। আমি সন্দেহ করি যে আমি এটি আরও ভাল গল্ফ করতে পারি, তবে এই মুহুর্তে সময়সীমার বাইরে চলে গেছে।

f=function(s){i=matrix(strtoi(strsplit(gsub('[^0-9,-]','',s),',')[[1]]),nrow=2);l=0;if((a<-length(b<-order(i[1,])))>0){if(a>1)i=i[,b];l=diff(i[,1:a])+1;x=c(t(i));for(n in 1:a)if(n==1|n==a|x[n]-l[n]>x[n+a-1]|x[n+a]+l[n]<x[n+1])l[n]=l[n]*2;};sum(l)}

মূলত ধারণাটি হ'ল

  • স্ট্রিংটি নিন এবং এটি একটি 2 সারির ম্যাট্রিক্সে পরিণত করুন
  • এটি সঠিক ক্রমে রয়েছে তা নিশ্চিত করুন
  • প্রতিটি কলামের জন্য পার্থক্যগুলি কাজ করে
  • প্রথম এবং শেষ পার্থক্য দ্বিগুণ করুন
  • মাঝের পার্থক্যগুলি দ্বিগুণ করুন যদি তাদের পূর্ববর্তী বা পরবর্তীগুলির মধ্যে ব্যবধান থাকে যা যথেষ্ট বড়
  • পার্থক্যের যোগফল ফিরিয়ে দিন

সম্পাদনা: বুঝেছি আমি অক্ষরগুলিকে মূলত মিসকন্ট করেছি, তারপরে কয়েকটি শেভ করার জন্য কয়েকটি জিনিস পুনরায় সাজিয়েছি।

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