সর্বোচ্চ পেরিমিটার পলিওমিনো


14

এটি কোড গল্ফ। বিজয়ী হ'ল সর্বকনিষ্ঠ সংখ্যক বাইটের সহিত কোড।


চ্যালেঞ্জ

ইনপুটগুলি এম এবং এন দেওয়া হয়েছে , বর্গক্ষেত্রগুলির একটি আয়তক্ষেত্রাকার গ্রিডের প্রস্থ এবং উচ্চতা, একটি বহুভুজ আউটপুট দেয় যা নিম্নলিখিতগুলি পূরণ করে:

  • বহুভুজ প্রান্তগুলি কেবল বর্গাকার প্রান্তগুলি দিয়ে গঠিত: কোনও তির্যক প্রান্ত নেই - সবগুলি উল্লম্ব বা অনুভূমিক।
  • বহুভুজের কোনও গর্ত নেই: বহুভুজের বাইরে প্রতিটি বর্গক্ষেত্রটি আয়তক্ষেত্রের বাইরের সীমানায় বহুভুজের বাইরে একটি বর্গক্ষেত্র থেকে শুরু করে বহুভুজের বাইরের স্কোয়ারগুলিতে অर्थোগোনাল পদক্ষেপে পৌঁছতে পারে।
  • বহুভুজের কোনও স্ব-ছেদ নেই: একটি বর্গক্ষেত্রের বর্গাকার প্রান্তগুলির মধ্যে, 2 এর বেশি কোনও বহুভুজের পরিধিটির অংশ হতে পারে না।
  • বহুভুজটি সংযুক্ত: বহুভুজের যে কোনও বর্গক্ষেত্রটি বহুভুজের যে কোনও বর্গক্ষেত্রকে বহুভুজের মধ্যে থাকা অर्थোগোনাল পদক্ষেপের মাধ্যমে বহুভুজের অন্য যে কোনও বর্গ থেকে অবশ্যই পৌঁছাতে হবে।
  • বহুভুজের সর্বাধিক সম্ভব পরিধি রয়েছে: নীচে প্রদর্শিত সূত্র অনুসারে।

আপনার কোডটি এম এবং এন এর জন্য 1 থেকে 255 পর্যন্ত কাজ করবে।


সর্বাধিক ঘের জন্য সূত্র

এখানে চ্যালেঞ্জটি হচ্ছে সর্বোচ্চ পরিধি সহ সেই বহুভুজগুলির মধ্যে সবচেয়ে গল্ফযোগ্য finding সর্বোচ্চ পরিধিটি নিজেই সর্বদা সূত্র দ্বারা সংজ্ঞায়িত হয়:

এটি সত্য কারণ সর্বাধিক পরিধিগুলির জন্য প্রতিটি বর্গক্ষেত্রটি অবশ্যই ঘেরে থাকা উচিত। বিজোড় সংখ্যাগুলির পক্ষে এটি সম্ভব নয় এবং সবচেয়ে ভাল যেটি অর্জন করা যায় তা হ'ল এক প্রান্তি কম (যেহেতু ঘেরটি সর্বদা সমান হয়)।


আউটপুট

নিউলাইনটি পৃথক করা অক্ষরের একটি স্ট্রিং হিসাবে আকৃতিটিকে আউটপুট দিন ( ঠিক এম অক্ষরের এন সারি )। এখানে আমি বহুভুজের বাইরে স্কোয়ারের জন্য স্পেস এবং বহুভুজের অভ্যন্তরের স্কোয়ারের জন্য '#' ব্যবহার করছি, তবে আপনি কোনও দুটি দৃষ্টিভঙ্গি পৃথক অক্ষর ব্যবহার করতে পারেন, তবে এর অর্থ যে সমস্ত ইনপুটগুলির সাথে সামঞ্জস্য রয়েছে।

আপনি এক শীর্ষস্থানীয় নিউলাইন এবং এক অবধি নতুন লাইন অন্তর্ভুক্ত করতে পারেন।

আপনি যদি চান, আপনি যদি এর পরিবর্তে আউটপুট পারে এম ঠিক সারি এন অক্ষর, এবং আপনি চয়ন করতে পারেন এম দ্বারা এন কিছু ইনপুট এবং জন্য আউটপুট এন দ্বারা এম অন্যদের জন্য আউটপুট।


উদাহরণ

কোনও গর্তের কারণে অবৈধ :

###
# #
###

ছেদজনিত কারণে ত্রুটিযুক্ত (ত্রিভুজ স্পর্শ করে - পেরিমিটারে 4 বর্গাকার প্রান্তযুক্ত একটি শীর্ষবিন্দু) এবং ঘটনাক্রমে একটি গর্ত:

##
# #
###

সংযোগ বিচ্ছিন্ন হওয়ার কারণে অবৈধ :

#
# #
  #

সর্বাধিক ঘেরের বৈধ বহুভুজ:

# #
# #
###

ক্রেডিট

সর্বাধিক পরিধিটির মানটি কত দ্রুত গণনা করা যায় তা আমি প্রাথমিকভাবে অবমূল্যায়ন করেছি এবং আউটপুট হিসাবে কেবল সেই মানটি জিজ্ঞাসা করতে যাচ্ছি। মধ্যে চমৎকার সহায়ক মানুষ ধন্যবাদ চ্যাট নির্বিচারে এন এবং M জন্য সর্বোচ্চ ঘের কাজ কিভাবে ব্যাখ্যা এবং একটি চ্যালেঞ্জ যে বেশী একটি উত্তর ধরে চলবে এই মোড় সাহায্য করার জন্য ...

বিশেষভাবে ধন্যবাদ:

স্পার , জগারব , ফেয়ারসাম , জিমি 23013


আমি পলিওমিনোস বা বহুভুজ ব্যবহার করে এই প্রশ্নের নাম দিতে পারি (যেহেতু উভয়ই প্রযোজ্য)। কারও কি পছন্দ আছে? আপনি নীচের উপর মন্তব্য ভোট দিয়ে ইঙ্গিত করতে পারেন:
ট্রাইকপ্লেক্স

5
সর্বাধিক পরিধি পলিওমিনো
ট্রিকোপলাক্স

1
সর্বাধিক পরিধি সংযুক্ত বহুভুজ
ট্রিকোপলাক্স

ঠিক এম অক্ষরের এন সারি: আমরা যদি নির্দিষ্ট ইনপুটগুলির জন্য সুবিধাজনক মনে করি তবে আমরা দুটি ইনপুট মান বিনিময় করতে পারি?
স্তরের নদী সেন্ট

3
@ স্টিভভারিল আমি আউটপুট বিভাগটি সম্পাদনা করেছি। এটি কি আপনার অনুরোধের সাথে খাপ খায়?
ট্রাইকোপলাক্স

উত্তর:


4

সিজেম, 47 বাইট

l~_2%{\}|_'#:H*@({N+1$(2md\HS+*H+\SH+R=*++}fR\;

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

ব্যাখ্যা:

l~      Get and convert input.
_2%     Calculate second value modulo 2.
{\}|    If value is even, swap the two inputs. This puts odd on top if one is odd.
_'#:H*  Create top row of all # signs. Also save away # character as shortcut for later.
@(      Pull number of rows to top, and decrement because first is done.
{       Start loop over rows.
N+      Add newline.
1$      Copy row length to top of stack.
(2md    Decrement, and calculate mod/div with 2.
\       Swap mod and div, will use div first.
HS+     "# "
*       Repeat it based on div 2 of row length.
H+      Add one more #.
\       Swap mod of earlier division to top.
SH+     " #"
R=      Pick space or # depending on even/odd row number.
*       Repeat 0 or 1 times depending on mod 2 of row length.
+       Add the possible extra character to line.
+       Add line to result.
}fR     End of for loop over lines.
\;      Remove row length from stack, leaving only result string.

ফলাফলের জন্য দুটি প্রধান মামলা রয়েছে। যদি আকারের কমপক্ষে একটির মধ্যে বিজোড় হয় তবে প্যাটার্নটি সরল "রেক"। উদাহরণস্বরূপ, ইনপুট জন্য 7 6:

#######
# # # #
# # # #
# # # #
# # # #
# # # #

উভয় আকার যদি সমান হয় তবে একটি অতিরিক্ত কলাম রয়েছে যেখানে প্রতি দ্বিতীয় স্কয়ারটি "চালু" থাকে। উদাহরণস্বরূপ, ইনপুট জন্য 8 6:

########
# # # # 
# # # ##
# # # # 
# # # ##
# # # # 

এখন, এই বর্ণনাগুলি সমস্যার বিবরণ হিসাবে প্রদত্ত পরিধির তাত্ত্বিক সর্বোচ্চে পৌঁছেছে তা দেখাতে, আমাদের নিশ্চিত করতে হবে যে প্রথম প্যাটার্নটির পরিধি রয়েছে (M + 1) * (N + 1)এবং দ্বিতীয়টি একই মান বিয়োগ 1।

প্রথম প্যাটার্নের জন্য, আমাদের কাছে Mএকটি অদ্ভুত মাত্রা সহ পরিধি রয়েছে :

  1. M উপরের প্রান্তের জন্য
  2. 2 উপরের সারির পাশে।
  3. (M - 1) / 2 দাঁত মধ্যে ফাঁক জন্য।
  4. (M + 1) / 2ঘের 2 * (N - 1) + 1প্রতিটি সঙ্গে দাঁত ।

এটি এতে যোগ করে:

M + 2 + (M - 1) / 2 + (M + 1) / 2 * (2 * (N - 1) + 1) =
M + 2 + (M - 1) / 2 + (M + 1) * (N - 1) + (M + 1) / 2 =
2 * M + 2 + (M + 1) * (N - 1) =
(M + 1) * 2 + (M + 1) * (N - 1) =
(M + 1) * (N + 1)

দ্বিতীয় ক্ষেত্রে যেখানে উভয়ই Mএবং Nসমতুল্য, ঘেরটি আরও বাড়িয়ে তোলে:

  1. M উপরের প্রান্তের জন্য
  2. 2 উপরের সারির পাশে।
  3. M / 2 উপরের সারিতে খোলার জন্য #।
  4. M / 22 * (N - 1) + 1প্লেইন দাঁতগুলির জন্য প্রতিটি ঘের সহ দাঁত।
  5. ডানদিকের 2 * (N / 2 - 1)দাঁতগুলিতে জাগিগুলির জন্য অতিরিক্ত পরিধির টুকরা রয়েছে।

এই সমস্ত একসাথে যুক্ত করা:

M + 2 + M / 2 + (M / 2) * (2 * (N - 1) + 1) + 2 * (N / 2 - 1) =
M + 2 + (M / 2) * (2 * (N - 1) + 2) + N - 2 =
M + M * N + N =
(M + 1) * (N + 1) - 1

আমি মনে করি বাম অংশে জেগড অংশটি রেখে কয়েকটি বাইট সংরক্ষণ করতে পারি। কিছুটা কম স্ট্যাকের বদলানো দরকার require তবে ঘুমানোর সময় ...
রেটো কোরাাদি

5

রুবি, রেভ 1, 66

->(m,n){n.times{|i|puts ("#"*m**(1-i%2)).rjust(m,i>n-2?"# ":" ")}}

m1 বা m #এর মুদ্রিত হবে কিনা তা সিদ্ধান্ত নিতে 0 ও 1 পাওয়ারে উত্থাপিত ব্যবহৃত হয় ।

>পরিবর্তে সর্বশেষ সারির জন্য পরীক্ষা করতে ব্যবহৃত হয় ==

রাখার পরে স্থান থেকে মুক্তি পাওয়া যায় না, বা কোনও বন্ধনীও পাওয়া যায় না!

রুবি, রেভ 0, 69

->(m,n){n.times{|i|puts ("#"*(i%2==0?m:1)).rjust(m,i==n-1?"# ":" ")}}

এটি একটি বেনামে ল্যাম্বদা ফাংশন। এটি এর মতো ব্যবহার করুন:

f=->(m,n){n.times{|i|puts ("#"*(i%2==0?m:1)).rjust(m,i==n-1?"# ":" ")}}

M=gets.to_i
N=gets.to_i
f.call(M,N)

শেষ অবধি, এম এবং এন কে বিনিময় করা যেতে পারে কিনা তা জিজ্ঞাসা করার পরে আমার এটির দরকার নেই।


এন বিজোড়ের জন্য সাধারণ আউটপুট। যদি আমরা #ডানদিকে তাদের নিজেরটি মুছতে পারি তবে স্পষ্টভাবে আমাদের কাছে (এন + 1) (এম + 1) থাকবে। তাদের আকৃতিটিতে যোগ দেওয়ার সাথে সাথে অনুভূমিক পরিধিটির 2 স্কোয়ার সরিয়ে দেয় এবং উল্লম্ব ঘেরের 2 স্কোয়ার যুক্ত হয়, সুতরাং কোনও পরিবর্তন নেই।

এখানে আমরা "#"*(i%2==0?m:1)এম #চিহ্নগুলির একটি বিকল্প সারি এবং একটি #প্রতীক দিতে অভিব্যক্তির উপর নির্ভর করি এবং এম অক্ষরগুলিকে ডান সমর্থন করে।

5                        6
5                        5
#####                    ######
    #                         #
#####                    ######
    #                         #
#####                    ######

এমনকি এন এর জন্য সাধারণ আউটপুট। 5 6স্পষ্টভাবে একই পরিধির মতো 6 5, বা 5 5নীচের সারির ক্রেনলেশনের কারণে উল্লম্ব পরিধি যুক্ত করার সাথে তুলনায় এম + 1 = 6 এর বর্ধিত পরিমাণ রয়েছে । উল্লম্ব পরিধিতে আরও (এম + 1) -1 = 6 এর ইনক্রিমেন্টের 6 6সমান 6 5। সুতরাং তারা সূত্র অনুসারে হয়।

5                        6
6                        6
#####                    ######
    #                         #
#####                    ######
    #                         #
#####                    ######
# # #                    # # ##

এটি খুব সহজ যে রুবি rjustআপনাকে খালি ঘরগুলির জন্য প্যাডিং নির্দিষ্ট করতে দেয়। সাধারণত প্যাডিং সেট করা হয়" " তবে শেষ সারিটির জন্য আমরা স্যুইচ করে থাকি "# "(নোট করুন যে এন সমান হলে কেবল সর্বশেষ সারিতে প্যাডিং প্রয়োজন হবে Where যেখানে এন বিজোড় হয় শেষ সারিটি সম্পূর্ণ হবে এবং কোনও ন্যায়সঙ্গত হবে না, তাই আপনি ক্রেইনলেশনগুলি দেখতে পাবে না))

এটি এখানে দেখুন।


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

লিঙ্কের জন্য কোন সমস্যা নেই? আমি বুঝতে পেরেছিলাম যে এটি অন্যদের জন্য সহায়ক হবে যেহেতু আমি এটি পরীক্ষার জন্য ব্যবহার করেছি: পি বানান সম্পাদনার ক্ষেত্রে, আমি এটি প্রথম যে ফলাফলটি পেয়েছি তাতে পরিবর্তন করেছি, কারণ আমি বাস্তবে ব্যবহৃত শব্দটি কখনও দেখিনি। আমি রুবি (কিছুই, Infact) সম্পর্কে অনেক কিছু জানি না, কিন্তু আপনি পরিবর্তন করতে পারেন i%2==0থেকে i%2<1একটি বাইট (আমি ideone লিঙ্ক এই পরিবর্তনটি করে থাকেন) সংরক্ষণ করুন।
কেড

#এমনকি আপনার কি শেষ সারিটির জন্য প্যাডিং দরকার ? উদাহরণস্বরূপ, একেবারে শেষ চিত্রে, #নীচের ডান কোণে ঘেরটি ছাড়া কি একই রকম নয় ?
রেটো কোরাডি

@ রিটোকোরাদি এটি সত্যই একই পরিধি হবে - দেখে মনে হচ্ছে কোডটিতে অতিরিক্তটি অন্তর্ভুক্ত রয়েছে #কারণ এটি প্রতিটি লাইন ইতিমধ্যে শেষ হয়ে গেছে, সুতরাং সেখানে কোনও স্থান রাখার চেয়ে কম বাইট রয়েছে। (আমি রুবি যদিও জানি না ...)।
ট্রাইকোপল্যাক্স

1
পছন্দ করুন প্যাডিং "# "নয় " #"কারণ পরবর্তীটি #বিজোড় এম এর জন্য 2 সংলগ্ন দেয় যা অবশ্যই চাইত না। 2 #এমনকি এম এর জন্য সংলগ্ন কোনও ক্ষতি করে না, তাই আমি তার সাথে গেলাম। আমি চেষ্টা করি নি ljust, এটির সাথে আরও পরিষ্কারভাবে এটি করা সম্ভব হতে পারে তবে এটি এতটা স্পষ্ট হবে না যে আমি সারিতে প্রতি এম অক্ষরগুলি ঠিক ছাপছি।
স্তর নদী সেন্ট

5

সি, 109 97 বাইট এবং নির্ভুলতার প্রমাণ

আমি আমার সমাধানটি লিখছিলাম তবে @ স্টিভভারিল আমাকে এতে মারধর করেছেন। আমি ভেবেছিলাম আমি এটি সমস্ত ভাগ করে নেব, যেহেতু আমি কৌশলটি ব্যবহারের জন্য সঠিকতার প্রমাণ অন্তর্ভুক্ত করেছি।

হ্রাস কোড:

m,n,x;main(){for(scanf("%i%i",&m,&n); n;)putchar(x<m?"# "[x%2*(++x^m||~n&1)&&n^1]:(x=0,n--,10));}

হ্রাসের আগে:

m,n,x;

main(){
    for(scanf("%i%i",&m,&n); n;) 

        /* If x == m, prints out a newline, and iterates outer 
         * loop (x=0,n--) using comma operator.
         * Otherwise, paints a '#' on :
         *     Every even column (when x%2 is 0)
         *     On odd columns of the last row (++x^m||~n&1 is 0)
         *     On the first row (when n^1 is 0)
         * And a ' ' on anything else (when predicate is 1) */
        putchar(x<m?"# "[x%2*(++x^m||~n&1)&&n^1]:(x=0,n--,10));
}

কৌশল এবং প্রুফ:

সর্বাধিক পেরিমিটার সমীকরণ (এম + 1) (এন + 1) - ((এম + 1) (এন + 1)) মোড 2 এর সঠিকতা ধরে নিলে, নিম্নলিখিতটি ব্যবহৃত সর্বোত্তম কৌশলটি ব্যাখ্যা করে এবং অন্তর্ভুক্তি দ্বারা এর যথার্থতা প্রমাণ করে:

বিজোড় এম এর জন্য, আমরা এম / 2 + 1 আঙুল দিয়ে একটি হাতের মতো আকৃতি আঁকি, উদাহরণস্বরূপ:

3x2
# # 
###

5x3
# # #
# # #
#####

আমরা এখন প্রমাণ করি যে এই কৌশলটি ইনডাকশন দ্বারা সমস্ত বিজোড় এম এর জন্য সর্বোত্তম:

বেস কেস: এম = এন = 1
একক ঘর পূরণ করা হয়েছে। (1 + 1) * (1 + 1) = 2 * 2 = 4 থেকে সমাধানটি সঠিক এবং একটি বর্গক্ষেত্রের 4 টি দিক রয়েছে।

প্রস্থে অন্তর্ভুক্তি:
ধরে নিন যে হাতের আকৃতির কৌশলটি (এন, এম -2) যেখানে এম বিজোড়, অর্থাৎ এর পরিধিটি সর্বোত্তম এবং (এন + 1) (এম - 2 + 1) + ((এম -1) (এন + 1)) মোড 2 । আমরা এখন দেখাচ্ছি যে এটি (এন, এম) এর জন্য কাজ করবে ।

একটি আঙুল যোগ করার প্রক্রিয়া বহুভুজ থেকে এক প্রান্ত সরিয়ে, এবং 3 + 2N যোগ করে । উদাহরণ স্বরূপ:

 5x3 -> 7x3
 # # # $
 # # # $
 #####$$

এটি আমাদের অনুমানের সাথে একত্রিত করে যে পূর্ববর্তী পরিধিটি অনুকূল ছিল, নতুন পরিধিটি হ'ল:

(N + 1)*(M - 2 + 1) - ((M+1)*(N+1)) mod 2 - 1 + 3 + 2*N
(N + 1)*(M + 1) - ((M-1)*(N+1)) mod 2 - 2(N + 1) - 1 + 3 + 2*N
(N + 1)*(M + 1) - ((M-1)*(N+1)) mod 2

যেহেতু আমরা মডুলো 2 পাটিগণিত নিয়ে কাজ করছি,

((M-1)*(N+1)) mod 2 = ((M+1)*(N+1)) mod 2

সুতরাং, প্রমাণ করে যে আঙ্গুলগুলি যুক্ত করে প্রস্থ বৃদ্ধি করা একটি অনুকূল ঘেরের দিকে নিয়ে যায়।

উচ্চতার উপর আনয়ন:
ধরে নিন হ্যান্ড-শেপ কৌশলটি (N-1, M) এর জন্য কাজ করে , যেখানে এম বিজোড়, অর্থাৎ এর পরিধিটি সর্বোত্তম এবং এটি এন (এম + 1) + ((এম + 1) এন) মোড ঘ । আমরা এখন দেখাচ্ছি যে এটি (এন, এম) এর জন্য কাজ করবে ।

হাতের উচ্চতা বৃদ্ধি কেবল আঙুলগুলি দীর্ঘায়িত করে, প্রথম এবং প্রতিটি অন্যান্য এক্স-সূচকে অবস্থিত। প্রতিটি উচ্চতা বৃদ্ধির জন্য, প্রতিটি আঙুলগুলি ঘেরে দুটি যোগ করে এবং সেখানে (এম + 1) / 2 আঙ্গুলগুলি থাকে, সুতরাং এন এর বৃদ্ধি 2 এর মধ্যে 2 (এম + 1) / 2 = এম + 1 বৃদ্ধি করে ঘের।

হাইপোথিসিসের সাথে এটি সংমিশ্রণ করে আমাদের কাছে নতুন পরিধিটি হ'ল:

N*(M + 1) + ((M+1)*N) mod 2 + M + 1
(N + 1)*(M + 1) + ((M+1)*N) mod 2

মডুলার পাটিগণিত আমাদের শেষ শব্দটিকে সহজ করার অনুমতি দেয়, যাতে আমরা পাই:

(N + 1)*(M + 1) + ((M+1)*(N+1)) mod 2

সমাধানটি সমস্ত এন> 0 এবং বিজোড় এম> 0 এর জন্য অনুকূল।

এমনকি এম এর জন্যও, বোর্ডটি আমরা বিজোড় এম এর মতোই পূরণ করি তবে আমরা শেষ বিভাগে ক্রিলেশনগুলি যুক্ত করি, উদাহরণস্বরূপ:

4x3
# ##
# # 
####

6x4
# # #
# # ##
# # #
######

আমরা এখন প্রমাণ করি যে এই কৌশলটি সর্বোত্তম।

এমনকি এম এর জন্য অন্তর্ভুক্তি:
ধরে নিন যে সমাধানটি (এন, এম -1) এর জন্য বিজোড় এম -1 (শেষ ক্ষেত্রে প্রমাণিত) সহ সঠিক হয়েছে, যার (এন + 1) এম এর অনুকূল পরিধি রয়েছে (- এম (এন + 1)) মোড 2 । আমরা এখন দেখাচ্ছি যে এটি (এন, এম) এর জন্য কাজ করবে।

আঙ্গুলগুলি বাড়ানোর মতো, প্রতিটি ক্রাইনেলেশন বহুভুজের পরিধিগুলিতে দুটি যোগ করে। Crenelations মোট সংখ্যা হয় (n + এন mod 2) / 2 , মোট mod 2 n + এন ঘের এখনো যোগ করেনি।

হাইপোথিসিসের সাথে এটি সংমিশ্রণ করে আমাদের কাছে নতুন পরিধিটি হ'ল:

(N + 1)*M - (M*(N+1)) mod 2 + N + N mod 2
(N + 1)*(M + 1) - (M*(N+1)) mod 2 + N mod 2 - 1
(N + 1)*(M + 1) - (M*(N+1)) mod 2 - (N + 1) mod 2

আমাদের তা আছে

(M*(N+1)) mod 2 - (N + 1) mod 2 = ((M+1)*(N+1)) mod 2

কারণ এন যদি বিজোড় হয় তবে এটি 0 = 0 এ কমে যায় এবং এন সমান হলে এটি হ্রাস পাবে

- A mod 2 - 1 = -(A + 1) mod 2

সুতরাং কৌশলটি সমস্ত এম, এন> 0 এর জন্য অনুকূল ।


2
এটা অনেক গণিত! আপনি যে আকারটি তৈরি করছেন তার ঘেরের মাত্রা গণনা করতে এবং এটি প্রদত্ত সর্বাধিক মানটির সাথে দেখাতে পারে না? আপনি জানেন যে আপনার কতগুলি "আঙ্গুলগুলি" রয়েছে, প্রতিটি আঙুলের দৈর্ঘ্য ইত্যাদি So তাই পরিধিটি গণনা করা যুক্তিসঙ্গতভাবে সহজ হওয়া উচিত।
রেটো কোরাডি

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

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