User Tag List

Էջ 23 36-ից ԱռաջինԱռաջին ... 1319202122232425262733 ... ՎերջինըՎերջինը
Ցույց են տրվում 331 համարից մինչև 345 համարի արդյունքները՝ ընդհանուր 536 հատից

Թեմա: C++

  1. #331
    Լիարժեք անդամ MSGM-ի ավատար
    Գրանցման ամսաթիվ
    02.09.2008
    Գրառումներ
    131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Սպոյլերի մեջ եմ գրում, որ ուրիշներն էլ մտածեն:
     •
    • 
     Սեղմել՝ ցույց տալու համար


  2. #332
    Սկսնակ անդամ Hermsbir-ի ավատար
    Գրանցման ամսաթիվ
    01.03.2008
    Գրառումներ
    32
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Խնդրի լուծման ալգորիթմը ճիշտ է, բայց դե, 500 տարի հետո քանի՞ հատ կլինի
    Left foot, right foot, you idioten! We'll practice shooting next.

  3. #333
    Պատվավոր անդամ Lusina-ի ավատար
    Գրանցման ամսաթիվ
    06.12.2010
    Տարիք
    35
    Գրառումներ
    1,186
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Ժող,մի հատ սենց հարց.Ի՞նչ ա նշանակում հղում հղման վրա. c++ -ի ստանդարտն ասում ա, որ չի թույլատրվում, ու տրամաբանական էլ ա, որովհետև հղումը օբյեկտի վրա պետք ա լինի, իսկ ինքը հղումը օբյեկտ չի,ուղղակի լրացուցիչ անուն ա օբյեկտի համար.Հիմա հարցն էն ա, թե որ դեպքերում ա հնարավոր ունենալ T&& տիպ, որովհետև boosti-i remove_reference-ի մեջ էդ տարբերակն էլ ա հաշվի առած.

  4. #334
    Ինժեներ soultaker-ի ավատար
    Գրանցման ամսաթիվ
    13.05.2010
    Գրառումներ
    221
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Hermsbir-ի խոսքերից Նայել գրառումը
    Ո՞վ կարող է լուծել հետևյալ խնդիրը:

    Տրված է 1 հատ 15 տարեկան կենդանի: Այդ կենդանին այնպիսին է,որ ապրում է 35 տարի, իսկ սեռահասունացումը տեղի է ունենում 15 տարեկանում: Սկսած 15 տարեկանից կենդանին ամեն տարի ունենում է 1 ձագ : Բազմանալու համար կենդանուն զույգ չի պահանջվում: Գրել ծրագիր, որը պահանջի տարիների քանակ և դուրս բերի, թե այդքան տարի հետո քանի կենդանի կլինի: Ծրագիրը պետք է աշխատի մեծ թվերի համար (~800-1000 տարի):
    Կառաջարկեմ նույն խնդիրը, երբ տարիների քանակը կարող է լինել մինչև 1 000 000 000, իսկ պատասխանի փոխարեն պետք է տպել քանակը 1 000 003 -ի վրա բաժանվելուց ստացվող մնացորդը (մեծ թվերից խուսափելու համար):

  5. #335
    Սկսնակ անդամ Hermsbir-ի ավատար
    Գրանցման ամսաթիվ
    01.03.2008
    Գրառումներ
    32
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Խնդրի բարդություններից մեկը հենց մեծ թվերն են -_-
    Left foot, right foot, you idioten! We'll practice shooting next.

  6. #336
    Ինժեներ soultaker-ի ավատար
    Գրանցման ամսաթիվ
    13.05.2010
    Գրառումներ
    221
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Hermsbir-ի խոսքերից Նայել գրառումը
    Խնդրի բարդություններից մեկը հենց մեծ թվերն են -_-
    Դե նշված 800-1000 քանակի դեպքում ուղղակի պիտի որ կենդանիների քանակը մեծ ստացվի, որը պահելու համար պետք կգա գրել երկար թվաբանություն ձեռքով, իսկ իմ առաջարկած պայմանների դեպքում բարդությունը կայանում է նրանում, որ հնարավոր չի լինում խնդիրը լուծել տրիվիալ տարբերակով` այսինքն ուղղակի հերթով դիտարկելով քանակները ըստ ամեն տարվա:

  7. #337
    Սկսնակ անդամ Hermsbir-ի ավատար
    Գրանցման ամսաթիվ
    01.03.2008
    Գրառումներ
    32
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ձեր առաջարկածը ուղղակի մաշտաբավորման խնդիր չէ?
    Left foot, right foot, you idioten! We'll practice shooting next.

  8. #338
    Ինժեներ soultaker-ի ավատար
    Գրանցման ամսաթիվ
    13.05.2010
    Գրառումներ
    221
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում Hermsbir-ի խոսքերից Նայել գրառումը
    Ձեր առաջարկածը ուղղակի մաշտաբավորման խնդիր չէ?
    Մասշտաբավորում ասելով կոնկրետ ի՞նչը նկատի ունես: Ճիշտն ասած ծանոթ չեմ այդ տերմինին, իմ առաջարկած սահմանափակումների նպատակը խնդրի ալգորիթմական բարդությունը մեծացնելն էր, որ տրիվիալ ալգորիթմը դանդաղ աշխատի ու ցանկալի լինի ուրիշ արագ լուծում:

  9. #339
    Սկսնակ անդամ Hermsbir-ի ավատար
    Գրանցման ամսաթիվ
    01.03.2008
    Գրառումներ
    32
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Դիցուք ծնվողների քանակը 1 000 004 է : Այդ թվից ուղղակի կհանենք 1 000 003, որովհետեև այդքան հատը վերջնական պատասխանում ներդրում չեն ունենա: Էսքան բան չի?
    Left foot, right foot, you idioten! We'll practice shooting next.

  10. #340
    Լիարժեք անդամ MSGM-ի ավատար
    Գրանցման ամսաթիվ
    02.09.2008
    Գրառումներ
    131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում soultaker-ի խոսքերից Նայել գրառումը
    Կառաջարկեմ նույն խնդիրը, երբ տարիների քանակը կարող է լինել մինչև 1 000 000 000, իսկ պատասխանի փոխարեն պետք է տպել քանակը 1 000 003 -ի վրա բաժանվելուց ստացվող մնացորդը (մեծ թվերից խուսափելու համար):
    Երկար հանրահաշիվ գրելու հավես չկա, բայց դրա վրա մտածել կարելի ա: Իմ գրած լուծումը փաստորեն O(N) ա, նույնիսկ եթե n-րդ անդամի համար ինչ-որ բանաձև գտնեմ, չգիտեմ O(N)-ից ավելի լավ ժամանակում կլինի հաշվել, թե չէ : Իսկ եթե պետք ա, որ մի 10 րոպեի մեջ տեղավորվի, գրածս լուծումը կարելի ա հեշտությամբ ձևափոխել, որ հիշողության օգտագործումը O(1) լինի:
    Կոդ:
    #include <iostream>
    #include <time.h>
    
    using namespace std;
    
    #define MOD 1000000
    
    double getTime()
    {
    	return (double(clock())/CLK_TCK);
    }
    
    int F[2][40], N;
    
    int main()
    {
    	cin >> N;
    	double startTime = getTime();
    	F[0][15] = 1;
    	for (int i = 1, x = 1; i <= N; i++, x ^= 1)
    	{
    		int s = 0;
    		for (int j = 15; j < 35; j++)
    			s = (s + F[x ^ 1][j]) % MOD;
    		F[x][1] = s;
    		for (int j = 2; j <= 35; j++)
    			F[x][j] = F[x ^ 1][j - 1];
    	}
    	int ans = 0;
    	for (int i = 1; i <= 35; i++)
    		ans = (ans + F[x ^ 1][i]) % MOD;
    	cout << ans << endl;
    	cout << "Time: " << getTime() - startTime << endl;
    	return 0;
    }
    Իմ մոտ 450 վրկ. էր 1,000,000,000-ի համար:

  11. #341
    Ինժեներ soultaker-ի ավատար
    Գրանցման ամսաթիվ
    13.05.2010
    Գրառումներ
    221
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում MSGM-ի խոսքերից Նայել գրառումը
    Երկար հանրահաշիվ գրելու հավես չկա, բայց դրա վրա մտածել կարելի ա: Իմ գրած լուծումը փաստորեն O(N) ա, նույնիսկ եթե n-րդ անդամի համար ինչ-որ բանաձև գտնեմ, չգիտեմ O(N)-ից ավելի լավ ժամանակում կլինի հաշվել, թե չէ : Իսկ եթե պետք ա, որ մի 10 րոպեի մեջ տեղավորվի, գրածս լուծումը կարելի ա հեշտությամբ ձևափոխել, որ հիշողության օգտագործումը O(1) լինի:
    Կոդ:
    #include <iostream>
    #include <time.h>
    
    using namespace std;
    
    #define MOD 1000000
    
    double getTime()
    {
    	return (double(clock())/CLK_TCK);
    }
    
    int F[2][40], N;
    
    int main()
    {
    	cin >> N;
    	double startTime = getTime();
    	F[0][15] = 1;
    	for (int i = 1, x = 1; i <= N; i++, x ^= 1)
    	{
    		int s = 0;
    		for (int j = 15; j < 35; j++)
    			s = (s + F[x ^ 1][j]) % MOD;
    		F[x][1] = s;
    		for (int j = 2; j <= 35; j++)
    			F[x][j] = F[x ^ 1][j - 1];
    	}
    	int ans = 0;
    	for (int i = 1; i <= 35; i++)
    		ans = (ans + F[x ^ 1][i]) % MOD;
    	cout << ans << endl;
    	cout << "Time: " << getTime() - startTime << endl;
    	return 0;
    }
    Իմ մոտ 450 վրկ. էր 1,000,000,000-ի համար:
    Դե ամբողջ հարցը դրանում է, ես մեծ դեպքի համար առաջարկում եմ O(logN) լուծում O(N)-ի փոխարեն (N-ը տարիներ քանակն է):

  12. #342
    Լիարժեք անդամ MSGM-ի ավատար
    Գրանցման ամսաթիվ
    02.09.2008
    Գրառումներ
    131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Եթե վերաձևակերպեմ լուծումը, F(i)-ով կարելի ա նշանակել ծնվածների թիվը i-րդ տարում: Վերջնական պատասխանը կլինի 1-ից 35 տարի առաջ ծնվածների գումարը: Իսկ i-րդ տարում ծնվածների գումարը կլինի 15-34 տարի առաջ ծնվածների գումարը` մոտավորապես.
    F(i) = F(i - 34) + F(i - 33) + ... + F(i - 15)
    Հիմա եթե ունենք առաջին 35 տարիների հաշվարկը (F(1)-ից F(35)), դրանից կարող ենք F(2)-ից F(36)-ը ստանալ {F(1);F(2);...;F(35)} վեկտորը մատրիցով բազմապատկելով.
    Կոդ:
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    .
    .
    .
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
    կամ ինչ-որ սենց բան
    Դե էս մատրիցն էլ O(logN)-ում կարանք N աստիճան բարձրացնենք:

  13. Գրառմանը 2 հոգի շնորհակալություն են հայտնել.

    soultaker (09.04.2012), Varzor (10.04.2012)

  14. #343
    Ինժեներ soultaker-ի ավատար
    Գրանցման ամսաթիվ
    13.05.2010
    Գրառումներ
    221
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Մեջբերում MSGM-ի խոսքերից Նայել գրառումը
    Եթե վերաձևակերպեմ լուծումը, F(i)-ով կարելի ա նշանակել ծնվածների թիվը i-րդ տարում: Վերջնական պատասխանը կլինի 1-ից 35 տարի առաջ ծնվածների գումարը: Իսկ i-րդ տարում ծնվածների գումարը կլինի 15-34 տարի առաջ ծնվածների գումարը` մոտավորապես.
    F(i) = F(i - 34) + F(i - 33) + ... + F(i - 15)
    Հիմա եթե ունենք առաջին 35 տարիների հաշվարկը (F(1)-ից F(35)), դրանից կարող ենք F(2)-ից F(36)-ը ստանալ {F(1);F(2);...;F(35)} վեկտորը մատրիցով բազմապատկելով.
    Կոդ:
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    .
    .
    .
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
    կամ ինչ-որ սենց բան
    Դե էս մատրիցն էլ O(logN)-ում կարանք N աստիճան բարձրացնենք:
    Հենց դա էլ նկատի ունեի:

  15. #344
    Կեցցե թագավորը Varzor-ի ավատար
    Գրանցման ամսաթիվ
    16.03.2009
    Հասցե
    Երկիր մոլորակ, ՀՀ ք. Երևան
    Տարիք
    43
    Գրառումներ
    7,503
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)
    Ժողովուրդ ինչի եք բարդացնում?
    Բավարար է, որ պահեք մի հատ միաչափ զանգված, էլէմենտների քանակը նախապես չսահմանած` ցուցիչով, որտեղ ամեն էլէմենտի արժեքը կլինի տվյալ կենթադու տարիքը:
    Հետո ըստ տարիների ցիկլով անցնում ենք էդ զանգվածի վրայով:
    Եթե կենդանի սեռահասուն է (15<=k<=35), ապա զանգվ ածում մեկ տարր ավելացնում ենք ու իրա տարիքը դնում 1, քանակը մի հատով ավելացնում:
    Եթե կենդանին 35 է, ուրեն տարիքը դնում ենք զրո` սատկել է ու քանակը մի հատ հանում:
    Ցանկացած տարիների համար էլ աշխատում է` տրիվյալ լուծում է, բայց կարծում եմ կարելի է օպտիմիզացնել
     •
    • 
     Սեղմել՝ ցույց տալու համար


    Ոնց լուծում ա?
    Կհաշվի?

    Հ.Գ.
    Շատ մեծ թվերի պարագայում ճիշտ կլինի որոշ int-եր փոխարինել long-երով:
    Baseic-ում նման խնդիրը շատ հեշտ լուծվում է Dictionary տիպի օբյեկտով` յուրաքանչյուր էլէմենտը կենդանի է: Ցիկլով ֆռում ես` հենց "վախտը հասավ" սատկացնում ես` էլեմենտը ջնում ես, իսկ ետե սեռահասուն է` էլէմէնտ ես ավելացնում:
    C#-ում էդ Dictionary-ները օգտագործել եմ, բայց C++ում` ձևը չգիտեմ
    Վերջին խմբագրող՝ Varzor: 10.04.2012, 11:18:
    Լոխ մունք ենք, մնացածը` լոխ են...

  16. #345
    Լիարժեք անդամ MSGM-ի ավատար
    Գրանցման ամսաթիվ
    02.09.2008
    Գրառումներ
    131
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Զանգվածի մեծությունը փաստորեն տվյալ տարվա դրությամբ երբևիցե ապրած կենդանիների քանակն ա, չէ? Բայց մի քանի 100 տարուց ապրող կենդանիների քանակը էնքան մեծ ա դառնում, որ 64 բիտանոց long long-ն էլ չի հերիքում քանակը պահելու համար: Այսինքն ուղղակի սիմուլյացիա ես անում ու պատասխանը շատ հեշտ ստացվում ա, բայց մի քիչ մեծ թվերի համար համ շատ երկար ա աշխատում, համ էլ էդքան հիշողություն չի գտնվի բոլորի տարիքները հիշելու համար:
    Իմ վերջին լուծումը (կոդով), օրինակ, հիշողություն շատ քիչ ա օգտագործում ու օգտագործումն էլ N-ից կախված չի, բայց համեմատաբար դանդաղ ա աշխատում (N=1,000,000,000-ի համար մոտ 450 վրկ.): Իսկ էս ամենավերջին նկարագրածս լուծումը 0.5 վրկ.-ի մեջ կտեղավորվի նույնիսկ N=10^12-ի դեպքում:
    Ի դեպ, էդ ցուցիչի հետ սխալ ես աշխատում: Ցուցիչը հայտարարելուց, իրա արժեքը ինչ-որ անկապ թիվ ա (հիշողության մեջ անկապ տեղ ա ցույց տալիս), հաշվի առնելով էլ, որ զանգվածի երկարությունը ուզում ես դինամիկ փոխել, լավ կլինի std::vector-ից օգտվես.
    vector<int> vi;
    vi.push_back(a);

    Dictionary-ն էլ C++ ում std::map-ն ա`
    map<string, int> m;
    m["tandz"] = 121;
    m["khndzor"] = 367;
    cout << m["tandz"] + m["khndzor"] << endl;

  17. Գրառմանը 1 հոգի շնորհակալություն է հայտնել.

    Varzor (10.04.2012)

Էջ 23 36-ից ԱռաջինԱռաջին ... 1319202122232425262733 ... ՎերջինըՎերջինը

Թեմայի մասին

Այս թեման նայող անդամներ

Այս պահին թեմայում են 3 հոգի. (0 անդամ և 3 հյուր)

Էջանիշներ

Էջանիշներ

Ձեր իրավունքները բաժնում

  • Դուք չեք կարող նոր թեմաներ ստեղծել
  • Դուք չեք կարող պատասխանել
  • Դուք չեք կարող կցորդներ տեղադրել
  • Դուք չեք կարող խմբագրել ձեր գրառումները
  •