PDA

View Full Version : خطا در داده های بزرگ



Azar.099
دوشنبه 24 فروردین 1394, 21:12 عصر
سلام دوستان
این برنامه باید m , n , k بگیره (nتعداد کتاب وارد شده ) (m تعداد عملیات ) (K تعداد کا تا کتاب بالا را rotate میکنه )
عملیات ها هم add و rotate هست
الان مشکلم اینه که برای داده های بزرگ درست کار نمیکنه
به نظرتون مشکل برنامه از چیه ؟
#include <iostream>#include <cstdio>
#include <cstring>
#include <deque>
#include <string>


using namespace std;


int main(){
int N, M, K;
deque<string> Q; int cont;
char s[100];
bool dir = 0; //dir=0 -> pop_back() , dir=1 -> pop_front()
char L[140000][4]; int sz = 0;
char op[1000];


cin >> N >> M >> K;


if (N>K){
for (int i = 0; i<K; ++i){
cin >> s ;
Q.push_back(s);
}
cont = K;


for (int i = N - K - 1; i >= 0; --i){
++sz;
cin >> L[i] ;
}
}
else{
for (int i = 0; i<N; ++i){
cin >> s ;
Q.push_back(s);
}
cont = N;
}


for (int i = 0; i<M; ++i){
cin >> op ;


if (op[0] == 'r') dir ^= 1;
else{
memset(s, 0, sizeof(s));
for (int j = 4; op[j] != ')'; ++j) s[j - 4] = op[j];


if (K != 0){
if (cont == K){
if (dir == 0){
memcpy(L[sz++], Q.back().c_str(),1000);
Q.pop_back();
}
else{
memcpy(L[sz++], Q.front().c_str(), 1000);
Q.pop_front();
}
}
else ++cont;


if (dir == 0) Q.push_front(s);
else Q.push_back(s);
}
else memcpy(L[sz++], s, strlen(s));
}
}


if (dir == 0){
for (int i = 0; i<cont; ++i){
memcpy(L[sz], Q.back().c_str(),1000);
++sz;
Q.pop_back();
}
}
else{
for (int i = 0; i<cont; ++i){
memcpy(L[sz], Q.front().c_str(),1000);
++sz;
Q.pop_front();
}
}


for (int i = sz - 1; i >= 0; --i) cout << L[i] ;


return 0;
}

chikar
دوشنبه 24 فروردین 1394, 21:46 عصر
سلام
من کدتون رو مطالعه نکردم
فقط از صورت سوالتون میشه این طور جواب داد که بازه ای که برای متغیرهایی که تعریف کردید همون بازه اعداد نوع int هست که ماکزیمم مقدار 2147483647 رو می تونه در خودش نگهداره و در صورت محاسبه بیشتر و عدم رعایت این مساله ممکن است مثلا با جمع دو عدد بزرکتر از بازه int سر ریز یا over flow اتفاق بیفته
در این رابطه بحث هایی در این لینک (http://barnamenevis.org/showthread.php?490539-%D8%A8%D8%A7%D8%B2%D9%87-%DB%8C-%D8%AF%D8%A7%D8%AF%D9%87-int-%28%D8%9F%29) شده

Azar.099
دوشنبه 24 فروردین 1394, 21:55 عصر
نه مشکل از اون اینتجر ها نیست

Azar.099
دوشنبه 24 فروردین 1394, 21:57 عصر
جدای از اون سوالم که در بالا مطرح کردم این حلقه مشکل داره ؟؟؟


string name ;
//int j;
for (int j = 4; operation[j] != ')'; j++)
{
name[j - 4] = operation[j];
}
//name[j - 4] = null;
base.push(name);