int thirdgame(void)
{
long t = 1; //區間長度
long n = 0; //數列長度
vector<int> m; //放入當前區間的陣列
int input = 0; //輸入的數
long sum = 0; //最大總值
long temp = 0; //當前總值
cin >> t >> n; // 輸入區間長度和數列長度
while (cin >> input) //輸入下一個數
{
if (--t >= 0)
{ //未滿足區間數量時
sum += input; //加進總值
temp = sum;//將最大總值賦給當前總值
m.push_back(input); // 將當前輸入數加進陣列
--n; // 數列長度減一
continue; // 繼續回圈直到滿足區間長度
}
temp = temp - m.front() + input; //將上一次的當前總值減掉當前區間中的第一個數,加上新輸入的數
m.erase(m.begin()); //洗掉第一個數
m.push_back(input); //加進新數,更新區間
if (sum < temp) //如果當前總值大于最大總值,將當前總值賦予最大總值
sum = temp;
if (--n <= 0) //到達數列長度,退出回圈
break;
t = 0; // 此操作意義不大,僅為防止溢位
}
cout << sum << endl; //輸出最大總值
return 0;
}
/*條件:1 <= t <= n <= 300,000
0 <= input <= 10,000*/
資料量大時效率低下,求大神搭救orz,在線等
uj5u.com熱心網友回復:
我重新用指標又做了一遍,奈何是菜鳥,求大神int thirdgame(void)
{
long t = 1;
long n = 0;
int input = 0;
long sum = 0;
long temp = 0;
cin >> t >> n;
int *m = new int[t]();
const int *arr_sz = new const int(t);
while (cin >> input)
{
if (--t >= 0)
{
sum += input;
*(m + *arr_sz - 1 - t) = input;
temp = t == 0 ? sum : temp;
--n;
continue;
}
temp += input - *m;
sum = sum < temp ? temp : sum;
for (int *p = m; p != m + *arr_sz - 1; ++p)
*p = *(p + 1);
*(m + *arr_sz - 1) = input;
if (--n <= 0)
break;
else
continue;
}
cout << sum << endl;
delete[] m;
m = NULL;
delete arr_sz;
arr_sz = NULL;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108649.html
標籤:茶館
上一篇:為什么總是報錯
