#8276: WHY? WA(line:75251)


kevinyin99 (kevinyin)


#include <iostream>

using namespace std;

int main(){
   int n,m;
   cin>>n>>m;
   int full[n];
   for(int i=0;i<n;i++){
       cin>>full[i];
   }
   while(m--){
       int l,r,sum=0;
       cin>>l>>r;
       for(int i=l-1;i<r;i++){
          sum += full[i];         
       }    
       cout<<sum<<endl;
   }
   return 0;       
}
 
為啥會WA? 

#8291: Re:WHY? WA(line:75251)


a450 (要学会宽容)


不清楚 我觉得你程式速度太慢了 加快点试试
#8487: Re:WHY? WA(line:75251)


amoshuangyc (amoshyc)


= = 這是一題多筆測資的…
 
應該寫成:
while (cin >> n >> m)  {
    for (int i=0; i<n; i++){
        ...
    }
     
    while (m--) {
        ...
    }
    ... 
 
而且你這樣寫應該會 TLE。
最近有個學弟也在問這一題,底下是我給他的回覆:
 
底下用實例來說明。
a[] 是一個數列。已知 前三項之和為 23,且 前五項之和為 56,求 a[4] + a[5]。

答案很明顯是 56-23 = 33。
因為:
a[1] + a[2] + a[3] = 23
a[1] + a[2] + a[3] + a[4] + a[5] = 56
第二式減第一式得:
a[4] + a[5] = 56 - 23 = 33

弄懂以上概念後,我們再來討論題目。
很明顯地,讀入數列後,每次依照給定範圍,從頭慢慢加會 TLE,那我們是不是可以適先加好?

於是就可以使用上述方法:
程式一開始讀入數列就先加總,也就是說我們建立起一個陣列, sum 陣列,其中 sum[k] = a[1] + a[2] + ... + a[k]。

那當我們要求某個區間之和時,就可以用減的,即 a[k] + a[k+1] + ... + a[m] = sum[m] - sum[k-1] 得到。 
 
※ 這裡用 1 作為陣列的第一項,你可以自己修改成 0 ,不過因為題目是用 1 作為第一項,為防混亂,所以我在我的程式碼中也用 1 作為第一項。如果你想使用 0 作為你的陣列的第一項,那麼要記得:題目所說的第 r 項指的是你的陣列中的第 r-1 項。 


#8605: Re:WHY? WA(line:75251)


yorklai0523 (Orange)


#include

using namespace std;

int main(){
   int n,m;
   cin>>n>>m;
   int full[n];
   for(int i=0;i
       cin>>full[i];
   }
   while(m--){
       int l,r,sum=0;
       cin>>l>>r;
       for(int i=l-1;i
          sum += full[i];         
       }    
       cout<
   }
   return 0;       
}
 
為啥會WA? 
  for(int i=l-1;i<r;i++){
          sum += full[i];         
       }    
你這裡l-1會多加一個 
#9486: Re:WHY? WA(line:75251)


loo85213 (元元)


#include

using namespace std;

int main(){
   int n,m;
   cin>>n>>m;
   int full[n];
   for(int i=0;i
       cin>>full[i];
   }
   while(m--){
       int l,r,sum=0;
       cin>>l>>r;
       for(int i=l-1;i
          sum += full[i];         
       }    
       cout<
   }
   return 0;       
}
 
為啥會WA? 
 
因為資測裡包含好幾組
所以輸入n,m時要加上EOF判斷