244532026-02-11 20:16:52imreerikdaniel08Zenehallgatáscpp17Forditási hiba
#include <iostream>
#include <vector>

using namespace std;

int N, K;
bool megvan = 0;
vector<int> dalok;
vector<int> idopont;

void beolvas() {
    for (int i = 1; i <= N; i++) {
        cin >> dalok[i];
    }
    for (int i = 1; i <= K; i++) {
        cin >> idopont[i];
    }
}

void csel(int ido, int dal, int foosszeg, int osszeg) {
    if (megvan) return;
    if (dal > N) {
        dal = 1;
        osszeg = 0;
    }
    if (foosszeg == idopont[ido]) {
        cout << dal << " ";
        if (ido == K) {
            megvan = 1;
            return;
        }
        csel(ido + 1, dal, foosszeg, osszeg);
    } else if (osszeg == dalok[dal]) {
        csel(ido, dal + 1, foosszeg, 0);
    } else {
        csel(ido, dal, foosszeg + 1, osszeg + 1);
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> N >> K;

    dalok.resize(N + 1);
    idopont.resize(K + 1);

    beolvas();
    csel(1, 1, 0, 0);

    return 0;
}
Magyarázat a javításokról:
A csel függvényben a dal > N esetet előre helyeztem, hogy elkerüljem az indexelési hibát (dalok[dal] elérése dal > N esetén).
Amikor elérjük egy időpontot (foosszeg == idopont[ido]), a rekurzióban megtartottam az osszeg értéket (nem állítottam vissza 0-ra), hogy a dal folytatódjon ahelyett, hogy újraindulna.
Ez biztosítja, hogy a szimuláció helyesen működjön: a dalok sorrendben játszódnak le (ciklikusan, ha szükséges), és minden időpontnál kiírjuk az aktuális dal indexét.

#include <iostream>
#include <vector>


using namespace std;


int N,K;
bool megvan=0;
vector<int>dalok;
vector<int>idopont;


void beolvas(){
for(int i=1;i<=N;i++){
cin>>dalok[i];
}


 for(int i=1;i<=K;i++){
    cin>>idopont[i];
}

}


void csel(int ido,int dal,int foosszeg,int osszeg){
if(megvan)return ;
if(dal>N){
dal=1;
osszeg=0;
}
if(foosszeg==idopont[ido]){
cout<<dal<<" ";
if(ido==K){megvan=1;return;}
csel(ido+1,dal,foosszeg,osszeg);
}
else if(osszeg==dalok[dal]){
csel(ido,dal+1,foosszeg,0);
}
else{
csel(ido,dal,foosszeg+1,osszeg+1);
}
}


int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);


cin>>N>>K;

dalok.resize(N+1);
idopont.resize(K+1);

beolvas();
csel(1,1,0,0);

} ezzel a strukturaval hogy lehet gyorsabb a programom

Read more
Copy message
Edit message

cpp

Copy code
#include <iostream>
#include <vector>
#include <numeric> // accumulate-hez

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int N, K;
    cin >> N >> K;

    vector<int> dalok(N + 1);
    for (int i = 1; i <= N; i++) {
        cin >> dalok[i];
    }

    vector<int> idopont(K + 1);
    for (int i = 1; i <= K; i++) {
        cin >> idopont[i];
    }

    // Számítsuk ki a teljes ciklus hosszát
    int total = 0;
    for (int i = 1; i <= N; i++) {
        total += dalok[i];
    }

    // Kumulált hossz vektor: cum[0] = 0, cum[1] = dalok[1], ..., cum[N] = total
    vector<int> cum(N + 1, 0);
    for (int i = 1; i <= N; i++) {
        cum[i] = cum[i - 1] + dalok[i];
    }

    // Minden időpontnál számítsuk ki a dalt
    for (int i = 1; i <= K; i++) {
        int t = idopont[i];
        if (t == 0) {
            // Ha t=0, feltételezzük, hogy az első dal előtt vagyunk, de valószínűleg nem fordul elő
            cout << 1 << " ";
            continue;
        }
        // Pozíció a ciklusban: 1-től total-ig
        int pos = ((t - 1) % total) + 1;
        // Bináris keresés a cum vektorban, hogy melyik dalban vagyunk
        // Keressük a legnagyobb i-t, ahol cum[i-1] < pos <= cum[i]
        int low = 1, high = N;
        int dal = 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (cum[mid - 1] < pos && pos <= cum[mid]) {
                dal = mid;
                break;
            } else if (pos <= cum[mid - 1]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        cout << dal << " ";
    }
    cout << endl; // Opcionális: új sor a végén

    return 0;
}
Forditási hiba
open /var/local/lib/isolate/421/box/a.out: no such file or directory
main.cpp:54:1: error: 'Magyar\U000000e1zat' does not name a type
   54 | Magyarázat a javításokról:
      | ^~~~~~~~~~
main.cpp:66:5: error: redefinition of 'int N'
   66 | int N,K;
      |     ^
main.cpp:6:5: note: 'int N' previously declared here
    6 | int N, K;
      |     ^
main.cpp:66:7: error: redefinition of 'int K'
   66 | int N,K;
      |       ^
main.cpp:6:8: note: 'int K' previously declared here
    6 | int N, K;
      |        ^
main.cpp:67:6: error: redefinition of 'bool megvan'
   67 | bool megvan=0;
      |      ^~~~~~
main.cpp:7:6: note: 'bool megvan' previously defined here
    7 | bool megvan = 0;
      |      ^~~~~~
main.cpp:68:12: error: redefinition of 'std::vector<int> dalok'
   68 | vector<int>dalok;
      |            ^~~~~
main.cpp:8:13: note: 'std::vector<int> dalok' previously declared here
    8 | vector<int> dalok;
      |             ^~~~~
main.cpp:69:12: error: redefinition of 'std::vector<int> idopont'
   69 | vector<int>idopont;
      |            ^~~~~~~
main.cpp:9:13: note: 'std::vector<int> idopont' previously declared here
    9 | vector<int> idopont;
      |             ^~~~~~~
main.cpp:72:6: error: redefinition of 'void beolvas()'
   72 | void beolvas(){
      |      ^~~~~~~
main.cpp:11:6: note: 'void beolvas()' previously defined here
   11 | void beolvas() {
      |      ^~~~~~~
main.cpp:85:6: error: redefinition of 'void csel(int, int, int, int)'
   85 | void csel(int ido,int dal,int foosszeg,int osszeg){
      |      ^~~~
main.cpp:20:6: note: 'void csel(int, int, int, int)' previously defined here
   20 | void csel(int ido, int dal, int foosszeg, int osszeg) {
      |      ^~~~
main.cpp:105:5: error: redefinition of 'int main()'
  105 | int main()
      |     ^~~~
main.cpp:40:5: note: 'int main()' previously defined here
   40 | int main() {
      |     ^~~~
main.cpp:119:3: error: 'ezzel' does not name a type
  119 | } ezzel a strukturaval hogy lehet gyorsabb a programom
      |   ^~~~~
main.cpp...