#41349: c++解法


spark960513@gmail.com (Sparkkk_)

學校 : 臺北市立成功高級中學
編號 : 204599
來源 : [124.218.194.42]
最後登入時間 :
2025-01-21 22:03:40
a693. 吞食天地 | From: [124.218.194.42] | 發表日期 : 2024-07-19 02:21

一、我自己使用的解法,例外處理使用者輸入(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;
 
ZeroJudge Forum