當函式analiza()
沒有被注釋時,我的程式在input()
函式中顯示兩個訊息。( przed
, po
), 但是,如果我取消注釋analiza()
after input()
,它會中斷。我嘗試清理緩沖區、不同的庫等。沒有任何幫助。代碼:
#include <iostream>
using namespace std;
unsigned int liczba_osob, liczba_klapek, przeszli = 0;
unsigned long long osoby[200000], klapki[200000], minimum;
bool do_uzycia[200000]{0};
unsigned long long greatest();
bool czy_mozliwe(unsigned int osoba);
void input();
void analiza();
int main()
{
input();
analiza();
return 0;
}
unsigned long long greatest()
{
unsigned long long maxrn = klapki[0];
for (unsigned int i = 1; i < liczba_klapek; i )
if (klapki[i] > maxrn)
maxrn = klapki[i];
return maxrn;
}
bool czy_mozliwe(unsigned int osoba)
{
if (osoby[osoba] >= minimum)
return 1;
unsigned long long maximim = greatest();
if (osoby[osoba] maximim < minimum)
return 0;
for (unsigned int i = 0; i < liczba_klapek; i )
{
if (osoby[osoba] klapki[i] >= minimum && !do_uzycia[i])
{
do_uzycia[i] = 1;
return 1;
}
}
return 0;
}
void input()
{
cin >> liczba_osob;
for (unsigned int i = 0; i < liczba_osob; i )
cin >> osoby[i];
cin >> liczba_klapek;
for (unsigned int i = 0; i < liczba_klapek; i )
cin >> klapki[i];
cout<<"przed";
cin >> minimum;
cout<<"po";
}
void analiza()
{
for (unsigned int i = 0; i < liczba_osob; i )
if (czy_mozliwe(i))
przeszli ;
cout << przeszli;
}
所以,問題 rn 與輸入有關:
200000
10 20 30... (and 199997 times more)
200000
10 20 30... (and 199997 more)
2500000
由于陣列長度為 200000,因此最大輸入。程式在input()
之后凍結cout<<"przed";
。它不會輸入到最小變數。如果我洗掉對analiza()
in 的呼叫int main()
,則不會出現問題。
這是制作問題檔案的輸入檔案
uj5u.com熱心網友回復:
對于給定的輸入,您的函式analiza
對function進行了 200000 = 2 * 10^5 次呼叫czy_mozliwe
。該函式依次呼叫greatest
,它使回圈的 2 * 10^5 次迭代在每次迭代中進行比較,然后czy_mozliwe
繼續以 2 * 10^5 次迭代運行自己的回圈。
因此,為了完成執行analiza
,計算機需要執行回圈 in 的greatest
4 * 10^10 次迭代和回圈 in 的4 * 10^10 次迭代czy_mozliwe
。
那可能需要很長時間。
同時,您排隊的輸出cout<<"po";
可能只是在緩沖區中等待。你沒有看到它出來是因為你在寫它的時候沒有重繪 緩沖區。試試吧cout<<"po"<<std::endl;
。
然后您可能會考慮如何撰寫您的程式,以便它不需要對其內部回圈進行如此多的迭代。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402091.html
上一篇:正則運算式匹配/中斷
下一篇:Lua回到for回圈