प्रश्न: हमें एक क्रम दिया गया है 1,2,3...N. हमें दिए गए अनुक्रम को दो भागों A और B में विभाजित करने की आवश्यकता है। हमें न्यूनतम |a - b| की आवश्यकता है (जहाँ a, A में तत्वों का योग है, इसी तरह b)। यह दर्शाने के लिए कि क्या यह A के पास जाता है "1" से और यदि B "0" से निरूपित करता है।

उदाहरण: n = 3 के लिए। क्रम 1,2,3 होगा। इसलिए (ए:1,2) और (बी:3), |ए-बी| = 0. उत्तर है 110

समस्या: मैंने गणित को देखा और पाया कि:

(N is सम है): उत्तर वैकल्पिक रूप से होगा "01" --- "10" N के आकार तक। उदाहरण N = 6, उत्तर है: "011001", मान |a-b| = १.

(N विषम है): उत्तर वैकल्पिक रूप में होगा "00" --- "11" आकार तक N-1 और संलग्न करें "0" यदि पिछला तत्व "1" है अन्यथा "1" जोड़ें। उदाहरण N = 5, उत्तर है: "00110", मान |a-b| = १.

क्या मुझे कोई सीमा मामला याद आया या मेरा तर्क गलत है क्योंकि मेरा उत्तर गलत है!

कोड:

        if(n%2 == 0)
        {   
            ll count = n / 2;
            for(i=1;i<=count;i++)
            {
                 if(i%2 == 1)
                    cout << "01";
                        
                else
                    cout << "10";
            }
        }
        
        else
        {
            ll count = (n - 1) / 2;
                
            for(i=1;i<=count;i++)
            {
                if(i%2 == 1)
                    cout << "00";
                    
                else
                    cout << "11";
            }
            
            if(count%2 == 1)
                cout << "1";
                
            else
                cout << "0";
            
        }
        cout << endl;
0
Alpha 11 सितंबर 2020, 10:31

1 उत्तर

सबसे बढ़िया उत्तर

एक ही परिणाम के साथ सरल कोड

int main() {
    int n;
    cin >> n;
    int odd = n % 2;
    for (int i=0; i<n; i++) {
        if (((i + 1 - odd) % 4) / 2)
           cout << "1";
        else   
           cout << "0";
    }

    //bonus: difference
    cout << "\n" << (n + 1) % 4 / 2;
    return 0;
}
1
MBo 11 सितंबर 2020, 11:34