Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Problem ze zadaniem (prosty program).


Konrad516745

Rekomendowane odpowiedzi

Opublikowano

Witam, mam na zadanie zrobić taki program: http://main.edu.pl/pl/archive/ilocamp/2011/dwi
Napisałem coś takiego: 

#include <iostream>
using namespace std;
int n, m;
long long a[1000000], b[100000];
int main();
{
    ios_base::sync_with_stdio (0);
    int ha=0, hb=0;
    cin>>n>>m;
    for (int i=0; i<n; i++)
    {
        cin>>a[i]; ha=ha+a[i];}

    for (int i=0; i<m; i++)
            {
            cin>>b[i]; hb=hb+b[i];
            }

    int ile=0;

    while (ha!=hb)
    {
        if (ha>hb)
            {
                ha=ha-a[n-1];
                n--;
            }
        else {hb-=[m-1]; m--;}
        ile ++;
    }
        cout<<ile<<endl;
    }

Lecz niestety program nie komplikuje się. Błędy:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocale|323|warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc|
C:\Users\Konrad\Documents\pliczek.cpp|6|error C2447: '{' : missing function header (old-style formal list?)|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

Proszę o pomoc dopiero się zaczynam uczyć :)
Opublikowano
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocale|323|warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc|
C:\Users\Konrad\Documents\pliczek.cpp|28|error C3480: 'm': a lambda capture variable must be from an enclosing function scope|
C:\Users\Konrad\Documents\pliczek.cpp|28|error C2143: syntax error : missing ']' before '-'|
C:\Users\Konrad\Documents\pliczek.cpp|28|error C2059: syntax error : ']'|
C:\Users\Konrad\Documents\pliczek.cpp|28|error C2059: syntax error : '-'|
C:\Users\Konrad\Documents\pliczek.cpp|29|error C3493: 'ile' cannot be implicitly captured because no default capture mode has been specified|
||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|

Teraz się błędy tylko namnożyły xD

Złe zadanie podałem to ma być: http://main.edu.pl/pl/archive/ilocamp/2011/dwi
Opublikowano

W pierwszym poście dalej źle przekierowywuje

 

Ja bym ten kod napisał tak:

#include <iostream>

using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;
    uint32_t* left = new uint32_t[n];
    uint32_t* right = new uint32_t[m];
    uint64_t leftHeight = 0;
    uint64_t rightHeight = 0;
    uint32_t toTake = 0;

    for(int i = 0; i < n; ++i)
    {
        cin >> left[i];
        leftHeight+=left[i];
    }

    for(int i = 0; i < m; ++i)
    {
        cin >> right[i];
        rightHeight+=right[i];
    }

    uint32_t* leftTop = left + n - 1;
    uint32_t* rightTop = right + m - 1;

    while (leftHeight != rightHeight)
    {
        while(leftHeight > rightHeight)
        {
            leftHeight-=*leftTop;
            --leftTop;
            ++toTake;
        }
        while(rightHeight > leftHeight)
        {
            rightHeight -= *rightTop;
            --rightTop;
            ++toTake;
        }
    }
    cout << toTake << endl;
}

Nie wiem czy coś lepszego jest w tym przypadku możliwe. Spróbuj ten kod.

(Można to zrobić minimalnie szybciej ale nakład pamięciowy będzie O(w), gdzie w to min(n,m), czyli be sensu)

Opublikowano

możesz jeszcze spróbować tak

#include <iostream>

using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;
    uint32_t* left = new uint32_t[n+1];
    uint32_t* right = new uint32_t[m+1];
    left[0] = 0;
    right[0] = 0;
    uint32_t toTake = 0;

    for(int i = 0; i < n; ++i)
    {
        uint32_t height;
        cin >> height;
        left[i+1] = left[i]+height;
    }

    for(int i = 0; i < m; ++i)
    {
        uint32_t height;
        cin >> height;
        right[i+1] = right[i]+height;
    }

    uint32_t* leftTop = left + n;
    uint32_t* rightTop = right + m;

    while (*leftTop != *rightTop)
    {
        while(*leftTop > *rightTop)
        {
            --leftTop;
            ++toTake;
        }
        while(*rightTop > *leftTop)
        {
            --rightTop;
            ++toTake;
        }
    }
    cout << toTake << endl;
}

ewentualnie wyłączyć synchronizację

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...