পুনরায় সাজানো বৈষম্য


10

পটভূমি

পুনর্বিন্যাস বৈষম্য একটি বৈষম্য যে সংখ্যার সাজানোর উপর ভিত্তি করে তৈরি করা হয়। যদি আমার একই দৈর্ঘ্যের সংখ্যার দুটি তালিকা থাকে, x 0 , x 1 , x 2 ... x n-1 এবং y 0 , y 1 , y 2 ... y n-1 একই দৈর্ঘ্যের, যেখানে আমি তালিকাটিতে নম্বরগুলি পুনর্বিন্যাসের অনুমতি দেওয়া হয়েছে, x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1 এর মধ্যে 2 টি তালিকা সাজানোর জন্য একটি উপায় ক্রমহ্রাসমান আদেশ

এখানে উইকিপিডিয়া নিবন্ধ পড়ুন ।

কার্য

আপনি একটি প্রোগ্রাম লিখবেন যা এসটিডিআইএন থেকে ইনপুট নেয় বা এমন একটি ফাংশন যা 2 টি অ্যারে (বা সম্পর্কিত পাত্রে) সংখ্যার গ্রহণ করে (যা একই দৈর্ঘ্যের হয়)।

ধরে নিই যে আপনি একটি ফাংশন লিখেছেন যা ২ টি অ্যারে (ক এবং খ) গ্রহণ করে আপনি সর্বাধিকতর করতে দ্বিতীয় অ্যারে (খ) এর মধ্যে যে সংখ্যাগুলি পুনর্বিন্যাস করতে পারেন তার সংখ্যা সন্ধান করতে যাচ্ছেন:

a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1]

এই ক্ষেত্রে, অ্যারে বি যদি [1 0 , 2 1 , 2 2 , 3 3 , 3 4 ] (স্পষ্টতার জন্য সূচকগুলি) হয়,

[১ 0 , 2 1 , 2 2 , 3 3 , 3 4 ],

[১ 0 , 2 1 , 2 2 , 3 4 , 3 3 ], (দুটি 3 এর অদলবদল করুন)

[1 0 , 2 2 , 2 1 , 3 3 , 3 4 ] (দুটি 2 এর অদলবদল করুন)

[১ 0 , 2 2 , 2 1 , 3 4 , 3 3 ] (দুটি 3 এর অদলবদল করুন এবং দুটি 2 এর পরিবর্তন করুন)

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

এসটিডিআইএন ইনপুটটির জন্য, আপনি ধরে নিতে পারেন যে অ্যারেরগুলির আগে অ্যারের দৈর্ঘ্য সরবরাহ করা হয়েছে (দয়া করে এটি ব্যবহার করুন যাতে তা উল্লেখ করুন), বা অ্যারে বিভিন্ন লাইনে সরবরাহ করা হয়েছে (এছাড়াও দয়া করে বিবরণ দিন)।

এখানে 4 সম্ভাব্য ইনপুট (সুবিধার্থে):

5 1 1 2 2 2 1 2 2 3 3 (length before arrays)

1 1 2 2 2 1 2 2 3 3 (the 2 arrays, concatenated)

1 1 2 2 2
1 2 2 3 3 (the 2 arrays on different lines)

5
1 1 2 2 2
1 2 2 3 3 (length before arrays and the 2 arrays on different lines)

আউটপুট জন্য, আপনি উত্তর ফেরত (যদি আপনি একটি ফাংশন লিখুন) বা STDOUT উত্তর মুদ্রণ করার অনুমতি দেওয়া হয়। আপনি উত্তর 9% 9 +7 (0 থেকে 10 অবধি) আউটপুট চয়ন করতে পারেন যদি আপনি আরও সুবিধাজনক হয় তবে 9 +6 পর্যন্ত) পারেন।

পরীক্ষার কেস (এবং ব্যাখ্যা):

[1 1 2 2 2] [1 2 2 3 3] => 24

প্রথম 2 এন্ট্রি 1 এবং 2 হতে হবে সর্বশেষ 3 এন্ট্রি 2, 3 এবং 3 হয়। প্রথম 2 এন্ট্রি এবং শেষ 2 এন্ট্রিগুলির মধ্যে 2 এর 2 ব্যবস্থা করার 2 উপায় রয়েছে। প্রথম 2 টি এন্ট্রিগুলির মধ্যে তাদের পুনরায় সাজানোর জন্য 2 টি উপায় রয়েছে। শেষ 2 টি এন্ট্রিগুলির মধ্যে তাদের পুনরায় সাজানোর 6 টি উপায় রয়েছে।

[1 2 3 4 5] [6 7 8 9 10] => 1

কেবলমাত্র 1 টি উপায় রয়েছে যা অ্যারেতে দেওয়া ব্যবস্থা।

[1 1 ... 1 1] [1 1 ... 1 1] (10000 numbers) => 10000! or 531950728

দ্বিতীয় অ্যারের প্রতিটি সম্ভাব্য ক্রমপত্র বৈধ।

ডেনিসের টেস্টকেস: Pastebin => 583159312 (গেলিক ভাষার 1000000007)

স্কোরিং:

এটি কোড-গল্ফ, তাই সংক্ষিপ্ত উত্তর জেতে।

টাই করার ক্ষেত্রে, পূর্ববর্তী জমা দেওয়ার পক্ষে, জমা দেওয়ার সময় বন্ধনগুলি ভেঙে দেওয়া হবে।

নোট নাও:

ধারকগুলি অরসোর্টড হতে পারে।

পাত্রে পূর্ণসংখ্যা শূন্য বা নেতিবাচক হতে পারে।

পরিমিত আকারের অ্যারেগুলির জন্য (প্রায় 10000 দৈর্ঘ্যের) দ্রুতগতিতে প্রোগ্রামটি চালাতে হবে (সর্বাধিক এক ঘন্টা)।

গণিত স্ট্যাক এক্সচেঞ্জের এই প্রশ্নের দ্বারা অনুপ্রাণিত ।


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

1
উদাহরণস্বরূপ আপনি দ্বিতীয় অ্যারে অদলবদল করার জন্য দিয়েছিলেন [1_0, 2_2, 2_1, 3_4, 3_3] (দু''র অদলবদল করুন এবং দু'টির 3 টি পরিবর্তন করুন) নিখোঁজ রয়েছে
উইলেম

আপনি কি [. . .]plz প্রতিক্রিয়া হিসাবে ইনপুট গ্রহণ করেন
Abr001am

আমরা যদি কোনও ফাংশন জমা দিই, আমাদের কি দুটি পৃথক যুক্তি নিতে হবে বা আমরা অ্যারের অ্যারে নিতে পারি?
ডেনিস

ঠিক আছে, অ্যারের অ্যারেগুলি দুর্দান্ত মনে হয়, এবং চ্যালেঞ্জকে খুব বেশি প্রভাবিত করে না। আমি পরীক্ষার মামলায় কাজ করব।
এলিমেন্ট 118

উত্তর:


4

সিজেম, 30 26 বাইট

q~](/:$_za+{e`0f=:m!:*}//*

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

এটি এই পরীক্ষার কেসটি এক সেকেন্ডেরও কম সময়ে সম্পন্ন করে :

$ time cjam <(echo 'q~](/:$_za+{e`0f=:m!:*}%)\:*\/N') < test-large.in | md5sum
5801bbf8ed0f4e43284f7ec2206fd3ff  -

real    0m0.308s
user    0m0.667s
sys     0m0.044s

অনলাইন দোভাষী এটিকে চালাতে 10 সেকেন্ডেরও কম সময় নেওয়া উচিত।

অ্যালগরিদম

ফলাফল ক্রমের উপর নির্ভর করে না একজন , তাই আমরা অনুমান করতে পারেন এটি সাজানো হবে। এর অর্থ হল সর্বাধিক ডট পণ্য অর্জনের জন্য বিও বাছাই করতে হবে।

এখন, যদি r 1 ,… r n হয় বাছাই করা A এর রানগুলির দৈর্ঘ্য , সেখানে kr কে আছে !উপাদানের বিভিন্ন rearrangements একজন এখনও অর্ডার আরোহী স্থাপিত।

তেমনিভাবে, s 1 ,… s n যদি বাছাই করা বি এর রানগুলির দৈর্ঘ্য হয় , সেখানে ks কে আছে !বি এর উপাদানগুলির বিভিন্ন পুনর্বিন্যাস যা এখনও আরোহী ক্রমের ফলস্বরূপ।

তবে এটি সমস্ত জুটি একাধিকবার গণনা করে। আমরা যদি সাজানো এবং বাছাই করা বি এর সাথে সম্পর্কিত উপাদানগুলির সংযোগগুলি গ্রহণ করি এবং ফলাফল 1 টির রান হিসাবে দৈর্ঘ্য হিসাবে টি 1 ,… টি এন সংজ্ঞায়িত করি , ∏t কে ! পূর্বোক্ত গুণক।

সুতরাং, পছন্দসই ফলাফল হ'ল (kr k !) × (ks k !) ÷ (kt কে !)

কোড

 q~                          Read and evaluate all input.
   ]                         Wrap the resulting integers in an array.
    (                        Shift out the first (length).
     /                       Split the remainder into chunks of that length.
      :$                     Sort each chunk.
        _z                   Push a copy and transpose rows with columns.
                             This pushes the array of corresponding pairs.
          a+                 Wrap in array and concatenate (append).
            {          }/    For A, B, and zip(A,B):
             e`                Perform run-length encoding.
               0f=             Select the runs.
                  :m!          Apply factorial to each.
                     :*        Reduce by multiplication.
                         /   Divide the second result by the third.
                          *  Multiply the quotient with the first result.

6

পাইথ, 29 28 বাইট

M/*FPJm*F.!MhMrd8aFCB,SGSHeJ

পাইথ সংকলকটিতে এটি অনলাইনে চেষ্টা করুন ।

অ্যালগরিদম

ফলাফলের ক্রম উপর নির্ভর করে না একজন , তাই আমরা অনুমান করতে পারেন এটি সাজানো হবে। এর অর্থ হল সর্বাধিক ডট পণ্য অর্জনের জন্য বিও বাছাই করতে হবে।

এখন, যদি r 1 ,… r n হয় বাছাই করা A এর রানগুলির দৈর্ঘ্য , সেখানে kr কে আছে ! উপাদানের বিভিন্ন rearrangements একজন এখনও অর্ডার আরোহী স্থাপিত।

তেমনিভাবে, s 1 ,… s n যদি বাছাই করা বি এর রানগুলির দৈর্ঘ্য হয় , সেখানে ks কে আছে ! বি এর উপাদানগুলির বিভিন্ন পুনর্বিন্যাস যা এখনও আরোহী ক্রমের ফলস্বরূপ।

তবে এটি সমস্ত জুটি একাধিকবার গণনা করে। আমরা যদি সাজানো এবং বাছাই করা বি এর সাথে সম্পর্কিত উপাদানগুলির জোড়গুলি গ্রহণ করি এবং ফলাফল 1 এর রানগুলির দৈর্ঘ্য হিসাবে টি 1 ,… t এন সংজ্ঞায়িত করি , kt কে ! পূর্বোক্ত গুণক।

সুতরাং, পছন্দসই ফলাফলটি (kr k !) × (ks k !) ÷ (kt কে !)

কোড

M/*FPJm*F.!MhMrd8aFCB,SGSHeJ

M                             Define g(G,H):
                      SGSH      Sort G and H.
                     ,          For the pair of the results.
                   CB           Bifurcated zip (C).
                                This returns [[SG, SH], zip([SG, SH])].
                 aF             Reduce by appending.
                                This returns [SG, SH, zip([SG, SH])].
      m                         Map; for each d in the resulting array:
              rd8                 Perform run-length encoding on d.
            hM                    Mapped "head". This returns the lengths.
         .!M                      Mapped factorial.
       *F                         Reduce by multiplication.
     J                          Save the result in J.
    P                           Discard the last element.
  *F                            Reduce by multiplication.
 /                  
                          eJ    Divide the product by the last element of J.
                                Return the result of the division.

প্রতিপাদন

আমি সিউডো-এলোমেলোভাবে length দৈর্ঘ্যের 100 টি পরীক্ষার কেস তৈরি করেছি, যা আমি উপরের কোড এবং এই নিষ্ঠুরতা পদ্ধতির সাথে সমাধান করেছি:

Ml.Ms*VGZ.pH

M             Define g(G,H) (or n(G,H) on second use):
         .pH    Compute all permutations of H.
  .M            Filter .pH on the maximal value of the following;
                 for each Z in .pH:
     *VGZ         Compute the vectorized product of G and Z.
    s             Add the products.
                  This computes the dot product of G and Z.
 l              Return the length of the resulting array.

এই ফলাফল ছিল:

$ cat test.in
6,9,4,6,8,4,5,6,5,0,8,2
0,7,7,6,1,6,1,7,3,3,8,0
3,6,0,0,6,3,8,2,8,3,1,1
2,3,0,4,0,6,3,4,5,8,2,4
9,1,1,2,2,8,8,1,7,4,9,8
8,3,1,1,9,0,2,8,3,4,9,5
2,0,0,7,7,8,9,2,0,6,7,7
0,7,4,2,2,8,6,5,0,5,4,9
2,7,7,5,5,6,8,8,0,5,6,3
1,7,2,7,7,9,9,2,9,2,9,8
7,2,8,9,9,0,7,4,6,2,5,3
0,1,9,2,9,2,9,5,7,4,5,6
8,4,2,8,8,8,9,2,5,4,6,7
5,2,8,1,9,7,4,4,3,3,0,0
9,3,6,2,5,5,2,4,6,8,9,3
4,2,0,6,2,3,5,3,6,3,1,4
4,8,5,2,5,0,5,1,2,5,9,5
6,8,4,4,9,5,9,5,4,2,8,7
8,9,8,1,2,2,9,0,5,6,4,9
4,7,6,8,0,3,7,7,3,9,8,6
7,5,5,6,3,9,3,8,8,4,8,0
3,8,1,8,5,6,6,7,2,8,5,3
0,9,8,0,8,3,0,3,5,9,5,6
4,2,7,7,5,8,4,2,6,4,9,4
3,5,0,8,2,5,8,7,3,4,5,5
7,7,7,0,8,0,9,8,1,4,8,6
3,9,7,7,4,9,2,5,9,7,9,4
4,5,5,5,0,7,3,4,0,1,8,2
7,4,4,2,5,1,7,4,7,1,9,1
0,6,2,5,4,5,1,8,0,8,9,9
3,8,5,3,2,1,1,2,2,2,8,4
6,1,9,1,8,7,5,6,9,2,8,8
6,2,6,6,6,0,2,7,8,6,8,2
0,7,1,4,5,5,3,4,4,0,0,2
6,0,1,5,5,4,8,5,5,2,1,6
2,6,3,0,7,4,3,6,0,5,4,9
1,4,8,0,5,1,3,2,9,2,6,5
2,7,9,9,5,0,1,5,6,8,4,6
4,0,1,3,4,3,6,9,1,2,7,1
6,5,4,7,8,8,6,2,3,4,1,2
0,3,6,3,4,0,1,4,5,5,5,7
5,4,7,0,1,3,3,0,2,1,0,8
8,6,6,1,6,6,2,2,8,3,2,2
7,1,3,9,7,4,6,6,3,1,5,8
4,8,3,3,9,1,3,4,1,3,0,6
1,4,0,7,4,9,8,4,2,1,0,3
0,4,1,6,4,4,4,7,5,1,4,2
0,0,4,4,9,6,7,2,7,7,5,4
9,0,5,5,0,8,8,9,5,9,5,5
5,7,0,4,2,7,6,1,1,1,9,1
3,1,7,5,0,3,1,4,0,9,0,3
4,4,5,7,9,5,0,3,7,4,7,5
7,9,7,3,0,8,4,0,0,3,1,0
2,4,4,3,1,2,5,2,9,0,8,5
4,8,7,3,0,0,9,3,7,3,0,6
8,9,1,0,7,7,6,0,3,1,8,9
8,3,1,7,3,3,6,1,1,7,6,5
6,5,6,3,3,0,0,5,5,0,6,7
2,4,3,9,7,6,7,6,5,6,2,0
4,8,5,1,8,4,4,3,4,5,2,5
7,5,0,4,6,9,5,0,5,7,5,5
4,8,9,5,5,2,3,1,9,7,7,4
1,5,3,0,3,7,3,8,5,5,3,3
7,7,2,6,1,6,6,1,3,5,4,9
9,7,6,0,1,4,0,4,4,1,4,0
3,5,1,4,4,0,7,1,8,9,9,1
1,9,8,7,4,9,5,2,2,1,2,9
8,1,2,2,7,7,6,8,2,3,9,7
3,5,2,1,3,5,2,2,4,7,0,7
9,6,8,8,3,5,2,9,8,7,4,7
8,8,4,5,5,1,5,6,5,1,3,3
2,6,3,5,0,5,0,3,4,4,0,5
2,2,7,6,3,7,1,4,0,3,8,3
4,8,4,2,6,8,5,6,2,5,0,1
7,2,4,3,8,4,4,6,5,3,9,4
4,6,1,0,6,0,2,6,7,4,9,5
6,3,3,4,6,1,0,8,6,1,7,5
8,3,4,2,8,3,0,1,8,9,1,5
9,6,1,9,1,1,8,8,8,9,1,4
3,6,1,6,1,4,5,1,0,1,9,1
6,4,3,9,3,0,5,0,5,3,2,4
5,2,4,6,1,2,6,0,1,8,4,0
3,5,7,6,3,6,4,5,2,8,1,5
6,3,6,8,4,2,7,1,5,3,0,6
9,1,5,9,9,1,1,4,5,7,3,0
1,6,7,3,5,8,6,5,5,2,6,0
2,8,8,6,5,5,2,3,8,1,9,8
0,4,5,3,7,6,2,5,4,3,2,5
5,1,2,3,0,3,4,9,4,9,4,9
5,8,2,2,0,2,4,1,1,7,0,3
0,6,0,0,3,6,3,6,2,2,2,9
2,4,8,1,9,4,0,8,8,0,4,7
3,9,1,0,5,6,8,8,2,5,2,6
5,3,8,9,1,6,5,9,7,7,6,1
8,6,9,6,1,1,6,7,7,3,2,2
7,2,1,9,8,8,5,3,6,3,3,6
9,9,4,8,7,9,8,6,6,0,3,1
8,3,0,9,1,7,4,8,0,1,6,2
8,2,6,2,4,0,2,8,9,6,3,7
1,0,8,5,3,2,3,7,1,7,8,2
$ while read; do
> pyth -c 'M/*FPJm*F.!MhMrd8aFCB,SGSHeJMl.Ms*VGZ.pHAc2Q,gGHnGH' <<< "$REPLY"
> done < test.in
[4, 4]
[4, 4]
[8, 8]
[4, 4]
[8, 8]
[2, 2]
[4, 4]
[4, 4]
[4, 4]
[36, 36]
[2, 2]
[8, 8]
[24, 24]
[8, 8]
[2, 2]
[2, 2]
[6, 6]
[2, 2]
[8, 8]
[2, 2]
[12, 12]
[2, 2]
[8, 8]
[12, 12]
[4, 4]
[12, 12]
[4, 4]
[6, 6]
[8, 8]
[8, 8]
[6, 6]
[4, 4]
[48, 48]
[8, 8]
[4, 4]
[1, 1]
[4, 4]
[4, 4]
[8, 8]
[4, 4]
[12, 12]
[2, 2]
[96, 96]
[2, 2]
[4, 4]
[2, 2]
[6, 6]
[24, 24]
[24, 24]
[48, 48]
[4, 4]
[8, 8]
[12, 12]
[8, 8]
[4, 4]
[2, 2]
[24, 24]
[16, 16]
[2, 2]
[8, 8]
[24, 24]
[4, 4]
[24, 24]
[4, 4]
[12, 12]
[8, 8]
[12, 12]
[4, 4]
[8, 8]
[4, 4]
[16, 16]
[4, 4]
[8, 8]
[8, 8]
[4, 4]
[4, 4]
[4, 4]
[4, 4]
[72, 72]
[24, 24]
[4, 4]
[4, 4]
[4, 4]
[2, 2]
[12, 12]
[4, 4]
[8, 8]
[4, 4]
[36, 36]
[6, 6]
[12, 12]
[8, 8]
[4, 4]
[2, 2]
[8, 8]
[24, 24]
[6, 6]
[1, 1]
[2, 2]
[2, 2]

আমার জমাটি যাচাই করার গতির প্রয়োজনীয়তা যাচাই করতে, আমি এই পরীক্ষার ক্ষেত্রে এটি চালিয়েছি ।

$ time pyth -c 'M/*FPJm*F.!MhMrd8aFCB,SGSHeJAc2QgGH' < test-large.in | md5sum
5801bbf8ed0f4e43284f7ec2206fd3ff  -

real    0m0.233s
user    0m0.215s
sys     0m0.019s

2

মতলব, 230 বাইট

সম্পাদনা করুন: ডেনিসের পরীক্ষার কেসের সাথে মেলে অনেকগুলি জিনিস স্থির করা হয়েছে এবং শূন্যমূল্যের কারণে nnz দ্বারা প্রতিস্থাপিত হয়।

f=1;t=-1;q=1;a=sort(input(''));b=sort(input(''));for i=unique(a)c=b(find(a==i));r=numel(c(c==t));f=f*factorial(numel(c))*sum(arrayfun(@(u)nchoosek(max(q,r),u),0:min(q,r)));z=c(end);y=numel(c(c==z));q=(t==z)*(q+r)+(t~=z)*y;t=z;end,f

ফাঁসি

[2 2 1 2 1]
[3 2 3 2 1]

f =

    24

ডেনিসের টেস্টকেস:

   A = importdata('f:\a.csv'); for i=1:100,a=sort(A(i,1:6));b=sort(A(i,7:12));
   f=1;t=-1;q=1;for i=unique(a)c=b(find(a==i));r=numel(c(c==t));f=f*factorial(numel(c))*sum(arrayfun(@(u)nchoosek(max(q,r),u),0:min(q,r)));z=c(end);y=numel(c(c==z));q=(t==z)*(q+r)+(t~=z)*y;t=z;end;
   disp(f);end

আউটপুট:

 4

 4

 8

 4

 8

 2

 4

 4

 4

36

 2

 8

24

 8

 2

 2

 6

 2

 8

 2

12

 2

 8

12

 4

12

 4

 6

 8

 8

 6

 4

48

 8

 4

 1

 4

 4

 8

 4

12

 2

96

 2

 4

 2

 6

24

24

48

 4

 8

12

 8

 4

 2

24

16

 2

 8

24

 4

24

 4

12

 8

12

 4

 8

 4

16

 4

 8

 8

 4

 4

 4

 4

72

24

 4

 4

 4

 2

12

 4

 8

 4

36

 6

12

 8

 4

 2

 8

24

 6

 1

 2

 2

ঠিক আছে, এটি সমস্যার সমাধান করে, সুতরাং ইনপুটটি খুব বেশি গুরুত্ব দেয় না।
এলিমেন্ট 118

1

সি ++, 503 বাইট

(কেবল মজাদার জন্য, একটি অ-গল্ফিং ভাষা)

#import<iostream>
#import<algorithm>
#define U 12345
#define l long long
using namespace std;int N,X=1,Y=1,Z=1,x[U],y[U],i=1;l p=1,M=1000000007,f[U];l e(l x,int y){return y?y%2?(x*e(x,y-1))%M:e((x*x)%M,y/2):1;}main(){for(f[0]=1;i<U;i++)f[i]=(f[i-1]*i)%M;cin>>N;for(i=0;i<N;i++)cin>>x[i];for(i=0;i<N;i++)cin>>y[i];sort(x,x+N);sort(y,y+N);for(i=1;i<N;i++)x[i]^x[i-1]?p=p*f[X]%M,X=1:X++,y[i]^y[i-1]?p=p*f[Y]%M,Y=1:Y++,x[i]^x[i-1]|y[i]^y[i-1]?p=p*e(f[Z],M-2)%M,Z=1:Z++;cout<<p*f[X]%M*f[Y]%M*e(f[Z],M-2)%M;}

অবরুদ্ধ সংস্করণ:

#include <cstdio>
#include <algorithm>
#define MOD 1000000007
using namespace std;
int N; // number of integers
int x[1000010]; // the 2 arrays of integers
int y[1000010];
long long product = 1;
long long factorial[1000010]; // storing factorials mod 1000000007
long long factorialInv[1000010]; // storing the inverse mod 1000000007
long long pow(long long x, int y) {
    if (y == 0) return 1;
    if (y == 1) return x;
    if (y%2 == 1) return (x*pow(x, y-1))%MOD;
    return pow((x*x)%MOD, y/2);
}
int main(void) {
    //freopen("in.txt", "r", stdin); // used for faster testing
    //precomputation
    factorial[0] = factorial[1] = 1;
    for (int i=2;i<=1000000;i++) {
        factorial[i] = (factorial[i-1]*i)%MOD;
        factorialInv[i] = pow(factorial[i], MOD-2);
    }
    // input
    scanf("%d", &N);
    for (int i=0;i<N;i++) {
        scanf("%d", &x[i]);
    }
    for (int i=0;i<N;i++) {
        scanf("%d", &y[i]);
    }
    // sort the 2 arrays
    sort(x, x+N);
    sort(y, y+N);
    int sameX = 1;
    int sameY = 1;
    int sameXY = 1;
    for (int i=1;i<N;i++) {
        if (x[i]==x[i-1]) {
            sameX++;
        } else {
            product *= factorial[sameX];
            product %= MOD;
            sameX = 1;
        }
        if (y[i]==y[i-1]) {
            sameY++;
        } else {
            product *= factorial[sameY];
            product %= MOD;
            sameY = 1;
        }
        if (x[i]==x[i-1] && y[i]==y[i-1]) {
            sameXY++;
        } else {
            product *= factorialInv[sameXY];
            product %= MOD;
            sameXY = 1;
        }
    }
    product *= factorial[sameX];
    product %= MOD;
    product *= factorial[sameY];
    product %= MOD;
    product *= factorialInv[sameXY];
    product %= MOD;
    printf("%lld\n", product);
    return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.