2 条题解
-
1
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; }
- 1
信息
- ID
- 125
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 173
- 已通过
- 29
- 上传者