Codeforces Round #228 (Div. 2) A. Fox and Number Game

本文探讨了一种通过操作使一组正整数的总和达到最小的方法。具体操作为选择两个不同的元素,其中一个大于另一个,然后将较大元素减去较小元素。文章提供了一个具体的算法实现,并通过样例展示了如何达到最小化的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A. Fox and Number Game
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Fox Ciel is playing a game with numbers now.

Ciel has n positive integers: x1x2, ..., xn. She can do the following operation as many times as needed: select two different indexes iand j such that xi > xj hold, and then apply assignment xi = xi - xj. The goal is to make the sum of all numbers as small as possible.

Please help Ciel to find this minimal sum.

Input

The first line contains an integer n (2 ≤ n ≤ 100). Then the second line contains n integers: x1x2, ..., xn (1 ≤ xi ≤ 100).

Output

Output a single integer — the required minimal sum.

Sample test(s)
input
2
1 2
output
2
input
3
2 4 6
output
6
input
2
12 18
output
12
input
5
45 12 27 30 18
output
15
Note

In the first example the optimal way is to do the assignment: x2 = x2 - x1.

In the second example the optimal sequence of operations is: x3 = x3 - x2x2 = x2 - x1.

有史以来第一次冲到第四题,有点思路,但是做不下去了。

提前把代码贴上吧

很简单的一道题,刚开始的想法是循环排序并作a[i]-=a[i-1]处理,提交后超时了

想到可以用a[i]%=a[i-1],但是这种情况要考虑到a[i]整除a[i-1]的情况,整除时另a[i]=a[i-1]

循环的条件是a[0]!=a[n-1];

代码如下:

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#define maxn 200
using namespace std;

int a[maxn];
int main(void){
    
    int n;
    while(cin >> n){
     for(int i=0; i<n; ++i){
      cin >> a[i];
     }
     sort(a,a+n);
     
     while(a[n-1] != a[0]){
      for(int i=n-1; i>0; --i)
       if(a[i]%a[i-1] == 0)
        a[i] = a[i-1];
       else a[i] %= a[i-1];
      sort(a,a+n);
     }  
     int sum = 0;
     for(int i=0; i<n; ++i)
      sum += a[i];
     cout << sum << endl;
    }
    return 0;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值