2 条题解

  • 1
    @ 2025-11-26 21:11:05

    Written by @Yue_chen

    题意:

    给定一个长度为 n 的数组和一个 x。

    数组会循环延长,数组前缀的第几位能超越x

    思路:

    开一个ans直接循环加数组会tle。

    优化一下枚举方法:

    求出一个循环数组的总和 sum,x/sum 得到会完整经过 cnt 次循环数组 。

    now = cnt * sum,t = n * cnt

    用处理好的次数再去再枚举加上一遍数组的每一位,直到大于x时结束。

    时间复杂度O(n)

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    using i64 = long long;
    
    void solve() {
        int n; cin>>n;
        
        i64 sum = 0;
        vector<int> a(n+1); 
        for(int i=1; i<=n; ++i) {
            cin>>a[i];
            sum += a[i];
        }
        
        i64 x; cin>>x;
        
        i64 cnt = x / sum;
        i64 t = cnt * n;
        i64 now = cnt * sum;
        while(now <= x) {
            now += a[t%n+1];
            t++;
        }
        
        cout<<t<<"\n";
    }
    
    signed main(void) {
        ios::sync_with_stdio(false); cin.tie(nullptr);
        
        int t=1;// cin>>t;
        while (t--) solve();
        return 0;
    }
    

    信息

    ID
    125
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    173
    已通过
    29
    上传者