B . 查亚日历 B.查亚日历 B.查亚日历 每次测试时限: 2 秒 每次测试时限:2 秒 每次测试时限:2秒 每次测试的内存限制: 256 兆字节 每次测试的内存限制:256 兆字节 每次测试的内存限制:256兆字节
题目描述
查亚部落相信世界末日有 n n n 个征兆。随着时间的推移,人们发现每隔 a i a_i ai 年( a i a_i ai 年、 2 ⋅ a i 2 \cdot a_i 2⋅ai 年、 3 ⋅ a i 3 \cdot a_i 3⋅ai 年、 … \dots … 年)就会出现 i i i 个征兆。
根据传说,世界末日必须按顺序出现。也就是说,首先要等待第一个征兆出现,然后严格按照这个顺序,第二个征兆才会出现,以此类推。也就是说,如果第 i i i 个征兆在 x x x 年出现,那么部落就会从 x + 1 x+1 x+1 年开始等待第 ( i + 1 ) (i+1) (i+1) 个征兆的出现。
哪一年会出现 n n n /th征兆,世界末日会在哪一年发生?
输入
输入的第一行包含一个整数 t t t ( 1 ≤ t ≤ 1000 1 \le t \le 1000 1≤t≤1000 ) - 测试用例的数量。然后是测试用例的说明。
每个测试用例的第一行包含一个整数 n n n ( 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100 ) - 符号个数。
每个测试用例的第二行包含 n n n 个整数 a 1 , a 2 , a 3 , … , a n a_1, a_2, a_3, \dots, a_n a1,a2,a3,…,an ( 1 ≤ a i ≤ 1 0 6 1 \le a_i \le 10^6 1≤ai≤106 )–周期性符号。( 1 ≤ a i ≤ 1 0 6 1 \le a_i \le 10^6 1≤ai≤106 ) - 符号的周期性。
输出
对于每个测试用例,输出一个整数 - 所有 n n n 符号出现的年份。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int N = 100010;int a[110];int main()
{int t; cin>>t;while (t--){int n; cin>>n;for (int i = 1; i <= n; i++)cin>>a[i];LL ans=a[1];for (int i = 2; i <= n; i++){if(a[i]>ans)ans=a[i];else ans = a[i] * (ans / a[i] + 1);}cout<<ans<<endl;}return 0;
}
解题关键: 当a[i]<=ans
时必须使用ans = a[i] * (ans / a[i] + 1);
而不能是while (a[i]<=ans)a[i]+=t;(t始终等于最初的a[i]) ,因为后面一种写法会超时