目录
牛客WY3 小易的升级之路
解析代码
本题的能力值的累加分两种情况,一种是直接相加bi,一种是累加当前能力值于bi的最大公约数。最大公约数可以通过碾转相除法求得:a与b的最大公约数相当于b与a,b余数的最大公约数。如果求余结果为0,则b为所求结果。
#include <iostream>
#include <vector>
using namespace std;
int getVal(int a, int b)
{
if (a > b)
swap(a, b);
for (int i = a; i >= 1; --i)
{
if (a % i == 0 && b % i == 0)
return i;
}
return -1;
}
int main()
{
int n = 0, c = 0;
while (cin >> n >> c)
{
vector<int> arr(n);
for (int i = 0; i < n; ++i)
{
cin >> arr[i];
}
for (int i = 0; i < n; ++i)
{
if (arr[i] <= c)
c += arr[i];
else
c += getVal(c, arr[i]);
}
cout << c << endl;
}
return 0;
}