5. 【Codeforces Round 927 (Div. 3)】B.查亚日历

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 2ai 年、 3 ⋅ a i 3 \cdot a_i 3ai 年、 … \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 1t1000 ) - 测试用例的数量。然后是测试用例的说明。

每个测试用例的第一行包含一个整数 n n n ( 1 ≤ n ≤ 100 1 \le n \le 100 1n100 ) - 符号个数。

每个测试用例的第二行包含 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 1ai106 )–周期性符号。( 1 ≤ a i ≤ 1 0 6 1 \le a_i \le 10^6 1ai106 ) - 符号的周期性。


输出

对于每个测试用例,输出一个整数 - 所有 n n n 符号出现的年份。


代码:

#include 
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]) ,因为后面一种写法会超时

你可能感兴趣的:(C++,算法竞赛,刷题,c++,算法)