3672021-11-01 16:56:09Kevinke12JardaTcpp14Hibás válasz 2/402ms2032 KiB
// ConsoleApplication1.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
typedef long long int64;
const size_t jardahossz = 100;
using namespace std;

int main()
{
    /*
    szamoljuk meg a nyitott lerakasokat, hany fele keppen lehet n hosszu jardat lerakni, hogy mindenhol "kotesben legyen" es a vegen kilogjon egy elem (alul vagy felül nem számít)
    2 hosszu nyitott - csak egy Laci betu
    3 hosszu nyitott - Laci + lapos
    n hosszu nyitott = n - 1 hosszu nyitott  (lapossal bovitve) + n-2 hosszu nyitott (T alakkal bovitve)
    n + 1 hosszu zart = n hosszu nyitott (Lacival lezarva) * 2 ( vizszintes tengelyre tukrozve, már számít az alul vagy felül )
    -> a bonthatatlan zárt lerakások fibonacci szerû sorozatot alkotnak
    */
    //zart[n] = n hosszu bonthatatlan lerakas hany fele van
    int64 zart[jardahossz + 1];
    zart[1] = 1;
    zart[2] = 1;
    zart[3] = 2;
    zart[4] = 2;
    //size_t idx = 5;
    //do{
     //   zart[idx] = (zart[idx - 1] + zart[idx - 2]) % 20200111;
        //printf_s("zart %u: %u\n", idx, zart[idx]);
    //} while (++idx <= jardahossz);

    int64 osszes[jardahossz + 1];
    osszes[0] = 1;
    /*
    osszes[1] =                                                                                                                                     osszes[0] * zart[1] = 1
    osszes[2] =                                                                                                               osszes[1] * zart[1] + osszes[0] * zart[2] = 2
    osszes[3] =                                                                                         osszes[2] * zart[1] + osszes[1] * zart[2] + osszes[0] * zart[3] = 5
    osszes[4] =                                                                   osszes[3] * zart[1] + osszes[2] * zart[2] + osszes[1] * zart[3] + osszes[0] * zart[4] = 14
    osszes[5] =                                             osszes[4] * zart[1] + osszes[3] * zart[2] + osszes[2] * zart[3] + osszes[1] * zart[4] + osszes[0] * zart[5]
    osszes[6] =                       osszes[5] * zart[1] + osszes[4] * zart[2] + osszes[3] * zart[3] + osszes[2] * zart[4] + osszes[1] * zart[5] + osszes[0] * zart[6]
    osszes[7] = osszes[6] * zart[1] + osszes[5] * zart[2] + osszes[4] * zart[3] + osszes[3] * zart[4] + osszes[2] * zart[5] + osszes[1] * zart[6] + osszes[0] * zart[7]
    Az osszes larakasok sorozata is majdnem fibonacci sorozatot alkot, mert zart[n] = zart[n-1] + zart[n-2] ha n>=5.
    zart[2] = zart[1] + 0
    zart[1] + zart[2] = zart[3]
    viszont zart[2] + zart[3] - 1 = zart[4]
    tehát osszes[n] = osszes[n - 1] * zart[1]  + osszes[n - 1] + osszes[n - 2] - osszes[n-3] * 1
               osszes[n] = 2 * osszes[n - 1] + osszes[n - 2]  - osszes[n - 3]
    */
    osszes[1] = 1;
    osszes[2] = 2;
    osszes[3] = 5;
    osszes[4] = 14;
    size_t idx = 5;
    do {
        osszes[idx] = (osszes[idx - 1] * 2 + osszes[idx - 2] - osszes[idx - 3]) % 20200111;
        //printf("osszes %u: %u\n", idx, osszes[idx]);
    } while (++idx <= jardahossz);

    int N;
    cin >> N;
    cout << osszes[N] << "\n";
    return 0;
}


RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/40
1Elfogadva0/02ms1864 KiB
2Hibás válasz0/01ms1960 KiB
3Elfogadva1/11ms1968 KiB
4Elfogadva1/12ms1976 KiB
5Hibás válasz0/22ms1980 KiB
6Hibás válasz0/21ms1984 KiB
7Hibás válasz0/31ms1992 KiB
8Hibás válasz0/31ms1992 KiB
9Hibás válasz0/31ms2000 KiB
10Hibás válasz0/31ms2000 KiB
11Hibás válasz0/31ms2000 KiB
12Hibás válasz0/31ms2008 KiB
13Hibás válasz0/31ms2016 KiB
14Hibás válasz0/31ms2016 KiB
15Hibás válasz0/31ms2016 KiB
16Hibás válasz0/31ms2024 KiB
17Hibás válasz0/41ms2032 KiB