一、我自己使用的解法,例外處理使用者輸入(1, 3)等狀況。
#include <iostream> #include <vector> using namespace std; int main() { int n, m; while(cin>>n>>m) { vector<<nt> foods(n), prefix(n); for(int i = 0; i < n; i++) cin>>foods[i]; //prefix sums caculation => a[n] = sum(1~n) prefix[0] = foods[0]; for(int i = 1; i < n; i++) prefix[i] = prefix[i-1] + foods[i]; //sum of certain range for(int i = 0; i < m; i++) { int start, end; cin>>start>>end; if(start < 2)cout<<prefix[end-1]<<endl; else cout<<prefix[end-1] - prefix[start -2]<<endl; } } return 0; }
二、參考guoivnn@gmail.com ( ID : 236523 )的解法,他的方式是直接讓陣列的第一項是零,就不用做輸入轉換成陣列項目。
#include <iostream> #include <vector> using namespace std; int main() { int n, m; while(cin>>n>>m) { vector<int> foods(n); //foods = {0,0,0,...,0} for(int i = 1; i <= n; i++) { cin>>foods[i]; foods[i] += foods[i-1]; } for(int i = 0; i < m; i++) { int start, end; cin>>start>>end; cout<<foods[end] - foods[start - 1]<<endl; } } return 0;