চ্যাম্পেইন ফোয়ারা ধাঁধা


30

খালি পানির গ্লাস নিম্নলিখিত ক্রমে সাজানো হয়েছে:

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি 1 ম গ্লাসে তরলটি পূর্ণ হয় তবে এটি পূর্ণ হলে, অতিরিক্ত তরল 2 এবং 3 সমান পরিমাণে চশমাতে প্রবাহিত হবে। গ্লাস 2 পূর্ণ হলে, অতিরিক্ত তরল 4 এবং 5 এবং এ জাতীয় মধ্যে প্রবাহিত হবে।

একটি এন লিটার তরল দেওয়া এবং প্রতিটি গ্লাসের সর্বাধিক ক্ষমতা 1 লিটার, কোনও গ্লাসে উপস্থিত তরল পরিমাণ যদি আপনি getWaterInBucket(int N, int X)কাচের সংখ্যা যেখানে এক্স গ্লাস নম্বরটি পূরণ করে গ্লাসে Nালাও যদি এন লিটার তরল খালি করেন তবে পরিমাণ দিন । সুতরাং উদাহরণস্বরূপ যদি আমি শুরুতে 4 লিটার পেতে চাই এবং আমি গ্লাস 3 এ জলটি খুঁজে পেতে চাই ফাংশনটিgetWaterInBucket(4, 3)

আমি এই প্রোগ্রামটিমেটিকভাবে কীভাবে সমাধান করব? আমি পাস্কেলের ত্রিভুজটি ব্যবহার করে একটি গণিতের সমাধান খুঁজতে চেষ্টা করেছি। এটি কার্যকর হয়নি। আমি এটিকে একটি গাছ হিসাবে বিবেচনা করেছি যাতে আমি এটির মতো একটি পরামিতি যুক্ত করতে পারি getWaterInBucket(BTree root, int N, int X)এবং তারপরে প্রতিটি স্তরের জন্য কিছু পুনরাবৃত্ত সমাধান সমাধান করতে পারি, তবে এই সমস্যায় প্যারামিটার অনুমোদিত নয়। স্পষ্ট কিছু আছে, কিছু কৌশল?


18
আমি এমন একটি প্রতিষ্ঠানে কাজ করতে চাই না যেখানে ম্যানেজমেন্টের সমস্যাগুলি শ্যাম্পেন ঝর্ণা সম্পর্কে ...
মউভিচিয়েল

আপনি কি কখনও গ্লাস 1 বাদে কোনও কাঁচে pourালতে পারেন? যদি তা না হয় তবে প্রতিটি স্তরের প্রতিটি গ্লাসে সমান পরিমাণে জল থাকবে। সুতরাং, আপনি যখনই 1, 3, 6, 10 ... লিটার pourালেন তখন আপনার পুরো স্তর থাকবে। আপনি যদি 7 লিটার pourালেন, তবে চতুর্থ সারিতে 4 টি চশমা রয়েছে তাই প্রতিটি 1/4 পূর্ণ হবে। এটির উপরে সমস্ত স্তর পূর্ণ হবে।
গ্লেনপিটারসন

5
@ গ্লেনপিটারসন যেভাবে আমি এটি পড়ছি তা থেকে আমার মনে হয় না তারা সমানভাবে পূরণ করবে। হ্যাঁ, 2 এবং 3 সমানভাবে পূরণ করবে কারণ তাদের কেবল কেবল একটি জিনিস ingালা হয় তবে একবার তারা 2/4 সমানভাবে 4/5 এবং 3/4 সমানভাবে 5/6 এর মধ্যে oursালা হয়, সুতরাং 5/6 এর ইঁদুর দ্বিগুণ হয়ে যায় । কেন্দ্রের কাপগুলি সর্বদা বাইরের কাপের চেয়ে দ্রুত পূরণ হয়। 4/6 এর মধ্যে পূর্ণ 8/9 25% পূর্ণ এবং 7/10 এখনও খালি রয়েছে।
ব্র্যাড

1
এছাড়াও, এটি আমাকে পাসকালের ত্রিভুজটির কথা মনে করিয়ে দেয় ..
ব্র্যাড

@ মউভিচিল হাহা গ্লেনপিটারসন - প্রথম গ্লাসটি alwaysালা হয় সর্বদা গ্লাস 1। সাক্ষাত্কারকারীও এই তথ্য ব্যবহার করতে বলেছেন। আমি এই সমস্যার সঠিক উত্তর সম্পর্কে আমার চেয়ে তার চেয়ে বেশি বিভ্রান্ত বলে মনে হয়েছিল।
স্লারিটিবার্টফেস

উত্তর:


35

আপনার কেবল ingালাও অনুকরণ করা দরকার, এরকম কিছু

void pour(double glasses[10], int glass, double quantity)
{
    glasses[glass] += quantity;
    if(glasses[glass] > 1.0)
    {
         double extra = glasses[glass] - 1.0;
         pour( glasses, left_glass(glass), extra / 2 );
         pour( glasses, right_glass(glass), extra / 2 );
         glasses[glass] = 1.0;
    }
}

double getWaterInGlass(int N, int X)
{
    double glasses[10] = {0,0,0,0,0,0};
    pour(glasses, 0, X);
    return glasses[N];
}

যেমন দাঁড়িয়ে আছে, এটি কোনও গাছ নয়। কারণ একই চশমাতে বিভিন্ন চশমা pourালা হয়, এটি এটিকে গাছ হতে বাধা দেয়।


16
+1 দুর্দান্ত পর্যবেক্ষণের জন্য যে এটি কোনও গাছ নয়।
মিহাই ড্যানিলা

2
ভাল উত্তর. একটি সাক্ষাত্কারে আপনার বলা উচিত যে এটিতে স্কেলিবিলিটি সমস্যা থাকতে পারে কারণ এটি সমস্ত চশমার সামগ্রী গণনা করে। এছাড়াও, আপনার কেসটি পরিচালনা করতে হবে যেখানে চশমাটির নীচের সারি থেকে জল oursুকে যায়। আর তুমি করতে চান return glasses[N-1], কারণ কাচ সংখ্যার 1 0. পরিবর্তে এ শুরু
টম প্যান করা

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

এটি একটি সত্যিই মার্জিত সমাধান। ধন্যবাদ। প্রতিটি পদক্ষেপ চিন্তার প্রক্রিয়াতে কী বোঝায় তা বোঝাতে আপনি কোডের লাইনে মন্তব্য যুক্ত করতে সম্পাদনা করতে পারলে আমি কৃতজ্ঞ হব। এছাড়াও চশমার সংখ্যা 10-তে সীমাবদ্ধ নয় এটি যে কোনও কিছু হতে পারে
স্লার্টিবার্টফ্লাস

1
আপনি বাম এবং ডান চশমাটি কীভাবে খুঁজে পাবেন?
কিউইক

7

একটি সাক্ষাত্কার পরিস্থিতিতে আমি কীভাবে এই প্রশ্নের উত্তর দেব তা এখানে (আমি এই প্রশ্নটি আগে দেখিনি, এবং আমার সমাধান না হওয়া পর্যন্ত আমি অন্যান্য উত্তরগুলির দিকে তাকাতে পারি নি):

প্রথমে, আমি কেবল এটি বের করার চেষ্টা করেছি (যা আপনি "গণিত সমাধান" বলেছিলেন) এবং আমি যখন 8 গ্লাসে পৌঁছেছিলাম তখন বুঝতে পেরেছিলাম যে এটির চেয়ে আরও শক্ত হবে কারণ কাচের 5 এর আগে গ্লাস 5 টি উপচে পড়তে শুরু করে I পুনরাবৃত্তির পথে নামার সিদ্ধান্ত নিয়েছে (কেবলমাত্র একটি এফওয়াইআই, প্রোগ্রামিং সাক্ষাত্কারের অনেকগুলি প্রশ্নের সমাধানের জন্য পুনরাবৃত্তি বা আনয়ন প্রয়োজন)।

পুনরাবৃত্তিজনকভাবে চিন্তাভাবনা করা, সমস্যাটি আরও সহজ হয়ে যায়: গ্লাস 8 এ কত জল রয়েছে? চশমা 4 এবং 5 থেকে সম্পূর্ণ পরিমাণ ছড়িয়ে পড়েছে তার অর্ধেক (এটি পূর্ণ না হওয়া পর্যন্ত)। অবশ্যই, এর অর্থ আমরা 4 এবং 5 এর চশমা থেকে কতটা ছড়িয়ে পড়েছে তার উত্তর দিতে হবে, তবে এটি খুব শক্তও নয় turns গ্লাস 5 থেকে কতটা ছড়িয়ে পড়েছে? চশমা 2 এবং 3 থেকে অনেকটা ছড়িয়ে পড়েছে তার অর্ধেক, গ্লাস 5 এ থাকা বিয়োগ লিটার বিয়োগ করে।

এটি সম্পূর্ণরূপে সমাধান করা (এবং মেসিও) দেয়:

#include <iostream>
#include <cmath>
using namespace std;

double howMuchSpilledOutOf(int liters, int bucketId) {
    double spilledInto = 0.0;
    switch (bucketId) {
        case 1:
            spilledInto = liters; break;
        case 2:
            spilledInto = 0.5 * howMuchSpilledOutOf(liters, 1); break;
        case 3:
            spilledInto = 0.5 * howMuchSpilledOutOf(liters, 1); break;
        case 4:
            spilledInto = 0.5 * howMuchSpilledOutOf(liters, 2); break;
        case 5:
            spilledInto = 0.5 * howMuchSpilledOutOf(liters, 2) + 0.5 * howMuchSpilledOutOf(liters, 3); break;
        case 6:
            spilledInto = 0.5 * howMuchSpilledOutOf(liters, 3); break;
        default:
            cerr << "Invalid spill bucket ID " << bucketId << endl;
    }
    return max(0.0, spilledInto - 1.0);
}

double getWaterInBucket(int liters, int bucketId) {
    double contents = 0.0;
    switch (bucketId) {
        case 1:
            contents = liters; break;
        case 2:
            contents = 0.5 * howMuchSpilledOutOf(liters, 1); break;
        case 3:
            contents = 0.5 * howMuchSpilledOutOf(liters, 1); break;
        case 4:
            contents = 0.5 * howMuchSpilledOutOf(liters, 2); break;
        case 5:
            contents = 0.5 * howMuchSpilledOutOf(liters, 2) + 0.5 * howMuchSpilledOutOf(liters, 3); break;
        case 6:
            contents = 0.5 * howMuchSpilledOutOf(liters, 3); break;
        case 7:
            contents = 0.5 * howMuchSpilledOutOf(liters, 4); break;
        case 8:
            contents = 0.5 * howMuchSpilledOutOf(liters, 4) + 0.5 * howMuchSpilledOutOf(liters, 5); break;
        case 9:
            contents = 0.5 * howMuchSpilledOutOf(liters, 5) + 0.5 * howMuchSpilledOutOf(liters, 6); break;
        case 10:
            contents = 0.5 * howMuchSpilledOutOf(liters, 6); break;
        default:
            cerr << "Invalid contents bucket ID" << bucketId << endl;
    }
    return min(1.0, contents);
}

int main(int argc, char** argv)
{
    if (argc == 3) {
        int liters = atoi(argv[1]);
        int bucket = atoi(argv[2]);
        cout << getWaterInBucket(liters, bucket) << endl;
    }
    return 0;
}

এই মুহুর্তে (অথবা হিসাবে আমি এই আউট লিখছিলাম), আমি সাক্ষাত্কার বলুন যে এই উৎপাদন আদর্শ সমাধান নয় হবে: তার মাঝে ডুপ্লিকেট কোড আছে howMuchSpilledOutOf()এবং getWaterInBucket(); এমন একটি কেন্দ্রীয় অবস্থান থাকতে হবে যা তাদের "ফিডারগুলিতে" বালতি মানচিত্র করে। কিন্তু একটি সাক্ষাত্কারে, যেখানে প্রয়োগের গতি এবং যথার্থতা কার্যকর করা এবং রক্ষণাবেক্ষণের গতি (অন্যথায় নির্দেশিত না হলে) তার চেয়ে বেশি গুরুত্বপূর্ণ, এই সমাধানটি বেশি পছন্দনীয়। তারপরে আমি কোডটি রিফ্যাক্টারের প্রস্তাব করব যা আমি উত্পাদন-গুণমান বিবেচনা করি তার নিকটবর্তী হতে এবং ইন্টারভিউওয়াকে সিদ্ধান্ত নিতে দিন।

চূড়ান্ত দ্রষ্টব্য: আমি নিশ্চিত যে আমার কোডটিতে কোথাও একটি টাইপ রয়েছে; আমি সেই সাক্ষাত্কারকারীর কাছেও এটি উল্লেখ করব এবং বলব যে এটির পুনরায় সংশোধন করার পরে বা ইউনিট-পরীক্ষার পরে আমি এতে আরও আত্মবিশ্বাসী বোধ করব।


6
এই সমাধানটি উদাহরণস্বরূপ হার্ড-কোডেড। চশমা যুক্ত মানে সুইচে "কেস" যুক্ত করা ... আমি মনে করি না এটি একটি ভাল সমাধান।
লুইজি ম্যাসা গ্যালারানো

2
@ LuigiMassaGallerano - এটি একটি সাক্ষাত্কারের প্রশ্ন হিসাবে এটি ঠিক আছে; এটি একটি নিখুঁত সমাধান বলে মনে করা হয় না। সাক্ষাত্কারকারীর প্রার্থীর চিন্তার প্রক্রিয়াটি আরও ভালভাবে বোঝার চেষ্টা করা হচ্ছে। এবং টম ইতিমধ্যে যে পয়েন্ট this isn't the ideal solution

1
এটা সত্যি কথা নয়। আমি আপনাকে নিশ্চিত করতে পারি যে এই দৃশ্যটি হার্ড কোডড হওয়ার উদ্দেশ্যে নয়। যদি আমি একটি সাক্ষাত্কারের প্রশ্ন জিজ্ঞাসা করি এবং কোনও পরীক্ষার কেস দৃশ্যধারণ করি যা ইন্টারভিউয়ি একটি হার্ড কোডেড সমাধান উপস্থাপন করেন তবে তিনি সাধারণ সমাধান দেওয়ার জন্য প্রস্তুত হতে পারেন বা তিনি সম্ভবত সাক্ষাত্কারটি পাস করতে যাচ্ছেন না।
রিগ

5

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

উপরের নীচের যে কোনও জায়গায় একটি কাঁচের কথা ভাবেন। এটির উপরে এক বা দুটি চশমা থাকবে যা এতে প্রবাহিত হতে পারে। সমন্বিত সিস্টেমের যথাযথ পছন্দ সহ (চিন্তা করবেন না, শেষটি দেখুন) যে কোনও গ্লাসের জন্য "পিতামাতা" চশমা পেতে আমরা একটি ফাংশন লিখতে পারি।

We গ্লাস থেকে অতিরিক্ত প্রবাহ নির্বিশেষে আমরা একটি গ্লাসে liquidেলে তরল পরিমাণ পাওয়ার জন্য একটি অ্যালগরিদম সম্পর্কে ভাবতে পারি। উত্তরটি অবশ্য প্রতিটি তাত্ক্ষণিক গ্লাসে সঞ্চিত পরিমাণকে প্রতিটি পিতামাতার বিয়োগে অনেক তরল pouredালা হয় 2 দিয়ে বিভক্ত Just এটি একটি পরিমাণ_পোলা_ইন্টো () ফাংশনটির দেহের অজগর টুকরো হিসাবে লেখা:

# p is coords of the current glass
amount_in = 0
for pp in parents(p):
    amount_in += max((amount_poured_into(total, pp) - 1.0)/2, 0)

সর্বাধিক () হ'ল নিশ্চিত করা যায় যে আমরা নেতিবাচক পরিমাণের ওভারফ্লো পেতে পারি না।

আমরা প্রায় শেষ! পৃষ্ঠার নিচে 'y' দিয়ে আমরা একটি সমন্বয় ব্যবস্থা নির্বাচন করি, প্রথম সারির চশমাটি 0 হয়, দ্বিতীয় সারিটি 1 হয় ইত্যাদি ' +1, তৃতীয় সারি -2, 0, +2 এবং আরও। গুরুত্বপূর্ণ বিষয়টি হ'ল স্তর y এর বাম বা ডান-সর্বাধিক গ্লাসে অ্যাবস (এক্স) = y থাকবে।

অজগর (২.x) এ সমস্ত কিছু মোড়ানো, আমাদের কাছে রয়েছে:

def parents(p):
    """Get parents of glass at p"""

    (x, y) = p
    py = y - 1          # parent y
    ppx = x + 1         # right parent x
    pmx = x - 1         # left parent x

    if abs(ppx) > py:
        return ((pmx,py),)
    if abs(pmx) > py:
        return ((ppx,py),)
    return ((pmx,py), (ppx,py))

def amount_poured_into(total, p):
    """Amount of fluid poured into glass 'p'"""

    (x, y) = p
    if y == 0:    # ie, is this the top glass?
        return total

    amount_in = 0
    for pp in parents(p):
        amount_in += max((amount_poured_into(total, pp) - 1.0)/2, 0)

    return amount_in

def amount_in(total, p):
    """Amount of fluid left in glass p"""

    return min(amount_poured_into(total, p), 1)

সুতরাং পিতে একটি গ্লাসে পরিমাণটি পেতে, পরিমাণ_ইন (মোট, পি) ব্যবহার করুন।

এটি ওপি থেকে পরিষ্কার নয়, তবে "আপনি প্যারামিটারগুলি যুক্ত করতে পারবেন না" সম্পর্কে কিছুটা বোঝাতে চাইলে বোঝানো কাচের সংখ্যার ক্ষেত্রে মূল প্রশ্নের উত্তর দিতে হবে । এটি উপরে ব্যবহৃত অভ্যন্তরীণ স্থানাঙ্ক সিস্টেমে শো গ্লাস নম্বরগুলি থেকে ম্যাপিং ফাংশন লিখে সমাধান করা হয়। এটি বেআইনীভাবে, তবে একটি পুনরাবৃত্ত বা গাণিতিক সমাধান ব্যবহার করা যেতে পারে। পুনরাবৃত্তি ফাংশন বুঝতে একটি সহজ:

def p_from_n(n):
    """Get internal coords from glass 'number'"""

    for (y, width) in enumerate(xrange(1, n+1)):
        if n > width:
            n -= width
        else:
            x = -y + 2*(n-1)
            return (x, y)

এখন কেবল একটি গ্লাস নম্বর গ্রহণ করতে উপরের পরিমাণ_ই () ফাংশনটি পুনরায় লিখুন:

def amount_in(total, n):
    """Amount of fluid left in glass number n"""

    p = p_from_n(n)
    return min(amount_poured_into(total, p), 1)

2

মজাদার.

এটি সিমুলেশন পদ্ধতির লাগে।

private void test() {
  double litres = 6;
  for ( int i = 1; i < 19; i++ ) {
    System.out.println("Water in glass "+i+" = "+getWater(litres, i));
  }
}

private double getWater(double litres, int whichGlass) {
  // Don't need more glasses than that.
  /*
   * NB: My glasses are numbered from 0.
   */
  double[] glasses = new double[whichGlass];
  // Pour the water in.
  pour(litres, glasses, 0);
  // Pull out the glass amount.
  return glasses[whichGlass-1];
}

// Simple non-math calculator for which glass to overflow into.
// Each glass overflows into this one and the one after.
// Only covers up to 10 glasses (0 - 9).
int[] overflowsInto = 
{1, 
 3, 4, 
 6, 7, 8, 
 10, 11, 12, 13, 
 15, 16, 17, 18, 19};

private void pour(double litres, double[] glasses, int which) {
  // Don't care about later glasses.
  if ( which < glasses.length ) {
    // Pour up to 1 litre in this glass.
    glasses[which] += litres;
    // How much overflow.
    double overflow = glasses[which] - 1;
    if ( overflow > 0 ) {
      // Remove the overflow.
      glasses[which] -= overflow;
      // Split between two.
      pour(overflow / 2, glasses, overflowsInto[which]);
      pour(overflow / 2, glasses, overflowsInto[which]+1);
    }
  }
}

যা প্রিন্ট করে (6 লিটারের জন্য):

Water in glass 1 = 1.0
Water in glass 2 = 1.0
Water in glass 3 = 1.0
Water in glass 4 = 0.75
Water in glass 5 = 1.0
Water in glass 6 = 0.75
Water in glass 7 = 0.0
Water in glass 8 = 0.25
Water in glass 9 = 0.25
Water in glass 10 = 0.0
...

যা সঠিক সম্পর্কে বলে মনে হচ্ছে।


-1

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

দ্বিতীয়ত, BTree বয্বহাের আপনার ধারণা, জরিমানা এটা ঠিক যে BTree একটি অভ্যন্তরীণ পরিবর্তনশীল, হয় না একটি বহিস্থিত প্যারামিটার।

আইওডাব্লু, আপনি যদি এই গণিতটি আপনার শিক্ষায় আবৃত করেন (এখানে যুক্তরাজ্যে এটি বিশ্ববিদ্যালয়ের আগে পড়ানো হয়) তবে আপনার খুব বেশি সমস্যা ছাড়াই এটি সমাধান করতে সক্ষম হওয়া উচিত।


1
আমি মনে করি না এটি দ্বিপদী ফাংশন। এটি দ্বিপদী ফাংশন হিসাবে প্রস্তাবিত হিসাবে এটি 1,2,1 এর অনুপাতের তৃতীয় স্তরে পৌঁছেছে, তবে মাঝের কাঁচটি প্রথমে পূর্ণ হয় এবং এর পরে প্যাটার্নটি ভেঙে যায়।
উইনস্টন ইওয়ার্ট

সময় সিমুলেশনের অংশ নয় এবং এটি শেষের ফলাফলগুলিকে প্রভাবিত করবে না।
ডেড এমএমজি

4
যেহেতু এর মডেলিং তরলটি পূরণ করা এবং চশমার বাইরে প্রবাহিত হওয়া আমাকে সেই সময়টি বজায় রাখতে হবে তা স্পষ্টভাবে সিমুলেশনের অংশ। 5 লিটারে, 4 এবং 6 আধা পূর্ণ হবে এবং 5 টি পূর্ণ হবে। ষষ্ঠ লিটার যুক্ত হয়ে গেলে, এটি 8 এবং 9 startালতে শুরু করবে, কিন্তু 7 এবং 10 কোনও জল পাবে না কারণ 4 ও 6 এখনও সক্ষমতা অর্জন করেনি। সুতরাং, দ্বিপদী ফাংশন সঠিক মানগুলির পূর্বাভাস দেয় না।
উইনস্টন এওয়ার্ট

3
-1, এটা ভুল। স্তরগুলি সমানভাবে পূরণ করা হবে না।
ড্যান_ ওয়াটারওয়ার্থ

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