Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में विजेता की भविष्यवाणी करें

मान लीजिए कि हमारे पास स्कोर की एक सरणी है जो गैर-ऋणात्मक पूर्णांक हैं। पहला खिलाड़ी सरणी के दोनों छोर से एक संख्या चुनता है, उसके बाद दूसरा खिलाड़ी और फिर पहला खिलाड़ी इत्यादि। हर बार जब कोई खिलाड़ी कोई नंबर चुनता है, तो वह नंबर दूसरे खिलाड़ी के लिए उपलब्ध नहीं होगा। यह तब तक जारी रहता है जब तक कि सभी अंकों का चयन नहीं कर लिया जाता। जिस खिलाड़ी को सबसे अधिक अंक मिलते हैं वह जीत जाता है। इसलिए, यदि हमारे पास स्कोर सरणी है, तो हमें यह अनुमान लगाना होगा कि खिलाड़ी 1 विजेता है या नहीं।

इसलिए, यदि इनपुट [1, 5, 233, 7] जैसा है, तो आउटपुट ट्रू होगा, जैसा कि पहले खिलाड़ी ने 1 चुना है। फिर दूसरे खिलाड़ी को 5 और 7 के बीच चयन करना होगा। खिलाड़ी चुनता है, पहला खिलाड़ी 233 चुन सकता है। अंत में, पहले खिलाड़ी के पास दूसरे खिलाड़ी (12) की तुलना में अधिक स्कोर (234) है, इसलिए हमें सही वापसी करने की आवश्यकता है क्योंकि पहला खिलाड़ी जीत सकता है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • यदि n 1 के समान है, तो -

    • सही लौटें

  • आकार के एक सरणी खिलाड़ी1 को परिभाषित करें:n x n, एक सरणी खिलाड़ी2 आकार n x n, और आकार n x n का योग।

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • इनिशियलाइज़ j :=0 के लिए, जब j

      • खिलाड़ी1[i, j] :=-1

      • खिलाड़ी 2[i, j] :=-1

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • इनिशियलाइज़ j :=i के लिए, जब j

      • यदि i, j के समान है, तो -

        • योग [i, j] :=arr[i]

      • अन्यथा

        • योग[i, j] :=arr[j] + sum[i, j-1]

  • प्रारंभिक लंबाई के लिए:=1, जब लंबाई <=n, अद्यतन (लंबाई 1 से बढ़ाएं), करें -

    • इनिशियलाइज़ i :=0 के लिए, जब i + लंबाई - 1

      • अंत:=मैं + लंबाई - 1

      • अगर मैं + 1 <=अंत, तो -

        • खिलाड़ी 1 [i, अंत]:=गिरफ्तारी की अधिकतम [i] + ((यदि खिलाड़ी 2 [i + 1, अंत] 1 के समान है, तो 0, अन्यथा खिलाड़ी 2 [i + 1, अंत])) और गिरफ्तारी [अंत ] + ((यदि खिलाड़ी 2 [i, अंत - 1] -1 के समान है, तो , अन्यथा खिलाड़ी 2 [i, अंत - 1]))

      • अन्यथा

        • खिलाड़ी1[i, अंत] :=गिरफ्तारी[i]

      • खिलाड़ी 2 [i, अंत]:=योग [i, अंत] - खिलाड़ी 1 [i, अंत]

  • जब खिलाड़ी1[0, n - 1]>=खिलाड़ी2[0, n - 1], अन्यथा असत्य हो, तो सही लौटें

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   lli solve(vector <int> arr, lli n){
      if (n == 1)
         return true;
      lli player1[n][n], player2[n][n], sum[n][n];
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            player1[i][j] = -1;
            player2[i][j] = -1;
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = i; j < n; j++) {
            if (i == j) {
               sum[i][j] = arr[i];
            }
            else {
               sum[i][j] = arr[j] + sum[i][j - 1];
            }
         }
      }
      for (int length = 1; length <= n; length++) {
         for (int i = 0; i + length - 1 < n; i++) {
            lli end = i + length - 1;
            if (i + 1 <= end)
               player1[i][end] = max(arr[i] + (player2[i + 1][end] == -1 ? 0 : player2[i + 1][end]), arr[end] + (player2[i][end - 1] == -1 ?: player2[i][end - 1]));
            else
               player1[i][end] = arr[i];
               player2[i][end] = sum[i][end] - player1[i][end];
            }
         }
         return player1[0][n - 1] >= player2[0][n - 1];
      }
      bool PredictTheWinner(vector<int>& nums) {
         return solve(nums, nums.size()) ;
   }
};
main(){
   Solution ob;
   vector<int> v = {1, 5, 233, 7};
   cout << (ob.PredictTheWinner(v));
}

इनपुट

{1, 5, 233, 7}

आउटपुट

1

  1. C++ . में भूलभुलैया II

    मान लीजिए कि एक भूलभुलैया में खाली जगह और दीवारों के साथ एक गेंद है। अब गेंद ऊपर, नीचे, बाएँ या दाएँ किसी भी दिशा में लुढ़क कर खाली रास्तों से जा सकती है, लेकिन दीवार से टकराने तक यह लुढ़कना बंद नहीं करेगी। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। हमें गेंद, गंतव्य और भूलभुलैया की स्थिति शुरू

  1. सी ++ में भूलभुलैया

    मान लीजिए कि एक भूलभुलैया में खाली जगह और दीवारों के साथ एक गेंद है। अब गेंद ऊपर, नीचे, बाएँ या दाएँ किसी भी दिशा में लुढ़क कर खाली रास्तों से जा सकती है, लेकिन दीवार से टकराने तक यह लुढ़कना बंद नहीं करेगी। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। हमें गेंद की स्थिति, गंतव्य और भूलभुलैया शुरू

  1. C++ . में भूलभुलैया III

    मान लीजिए कि खाली जगह और दीवारों के साथ एक भूलभुलैया है और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (यू), नीचे (डी), बाएं (एल) या दाएं (आर) दिशाओं को लुढ़क कर खाली जगहों से जा सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। उस भूलभुलैया में एक छेद