4 条题解

  • 0
    @ 2024-12-14 1:04:57

    `

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int inf=0x3f3f3f3f;
    const int N=1e6+10;
    int n,m;
    int total_word[N];
    struct node{
        int newlearn_word;
        int review_word;
        int last_word;
    }a[N];
    
    void solve()
    {
        cin >> n >> m;
        for(int i=1;i<=n;i++)
            cin >> total_word[i];
        a[1].newlearn_word=total_word[1];
        a[1].review_word=0;
        a[1].last_word=0;
        for(int i=2;i<=n;i++){
            // 如果 今天总共学的单词 < 昨天新学的单词数 + 昨天剩余没复习的单词数,
            if(total_word[i] < a[i-1].newlearn_word + a[i-1].last_word){
                a[i].newlearn_word = 0;  // 那么 新学的单词数 == 0。
                a[i].review_word = total_word[i];  // 那么 今天复习单词的数量应该 == 今天总共学的单词
                a[i].last_word = a[i-1].last_word + a[i-1].newlearn_word - total_word[i];  // 那么 今天没复习的单词数 == 昨天剩余没复习的单词数 + 昨天新学的单词数 - 今天学的的单词数,
            }else {
                a[i].newlearn_word = total_word[i] - (a[i-1].newlearn_word + a[i-1].last_word);  // 否则 新学的单词数 == 今天总共学的单词 - (昨天新学的单词数+昨天剩余没复习的单词数)
                a[i].review_word = a[i-1].newlearn_word + a[i-1].last_word;  //否则 今天复习单词的数量 == 昨天新学的单词 + 昨天剩余的单词
                a[i].last_word = 0;  // 否则 今天没复习的单词数 == 0。
            }
        }
        while(m--){
            int k; cin >> k;
            cout << a[k].newlearn_word << ' ' << a[k].review_word << ' ' << a[k].last_word << '\n';
        }
    }
    void close(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
    }
    signed main ()
    {
        close();int T = 1;
    //    cin >> T;
        while(T--) solve();
        return 0;
    } // 山鸟与鱼不同路,从此山水不相逢。莫问故人长短痛,昨夜星辰皆随风
    

    信息

    ID
    968
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    549
    已通过
    84
    上传者