Skip to content

11272: 【原1272】写数游戏

题目

题目描述

author: Chen Xutong 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1272

Description

纸上已经有n个数,每次随便取两个,用大的除一下得到结果,如果发现纸上没有,就写到纸上去,直到写不出为止。问纸上最后有几个数?

Sample Input1

2
9 2

Sample Output1

3

开始有 9 和 2,他可以再加上4,因为 9 div 2 = 4。 在他写完4之后就没什么可写的了,因为9 div 4 = 2,和 4 div 2 = 2。纸上就有 9,2 和 4。

Sample Input2

6
1 5 8 30 15 4

Sample Output2

11

数据范围

n <= 100

每个数 x_i <= 100

ligongzzz's solution

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;

    vector<int> vdata(n);
    unordered_map<int, bool> mdata;

    for (int i = 0; i < n; ++i) {
        cin >> vdata[i];
        mdata.insert(make_pair(vdata[i], true));
    }

    for (int i = 0; i < vdata.size(); ++i) {
        for (int j = 0; j < i; ++j) {
            int ans = vdata[i] > vdata[j] ? vdata[i] / vdata[j] : vdata[j] / vdata[i];
            if (mdata.find(ans) == mdata.end()) {
                vdata.emplace_back(ans);
                mdata.insert(make_pair(ans, true));
            }
        }
    }

    cout << vdata.size();

    return 0;
}