noip13

11.22

颓死了,不想改。

t1

场切。

观察大样例大胆猜测答案很小(实际上答案不超过6,伏笔)。

然后手模inf组数据即可发现结论。

将每个数在这几步中每次选几个看成 \(x\) 进制数 (\(x=a_{i+1}/a_i\)) ,而 \(x^{步数}\)\(x^{步数}-1\)个子集(减1是因为去除0),所以最多可判断 \(x^{步数}-1\) 个数。

之后便是找最小的步数。

然后就没了。

代码简单,主要就是能不能发现上面的性质。

伏笔回收,wy_x特判完前4个点后直接输出4,结果只有40pts,套数据发现10个点中有五个1,两个2, 3,5,6各一个,就是没有4。

无敌了wy_x,不愧是大手子,总能整出新活。

code

t1
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 70;
int n, a[N];
map<int, int> mp;

signed main()
{
    freopen("coin.in", "r", stdin);
    freopen("coin.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    // sort(a + 1, a + 1 + n);
    for (int i = 2; i <= n; ++i)
        ++mp[a[i] / a[i - 1]];
    int ans = 1, res = 0;
    for (auto y : mp)
    {
        int val = y.first;
        // cout << "val=" << y.first << "  cnt=" << y.second << "\n";
        int cnt = 1;
        while (1)
        {
            if (val - res - y.second - 1 >= 0)
            {
                res += y.second;
                ans = max(ans, cnt);
                // cout << "ans=" << ans << " res=" << res << "\n";
                break;
            }
            ++cnt;
            val *= y.first;
        }
    }
    cout << ans;
    return 0;
}

咕了。

posted @ 2025-11-22 19:43  HS_fu3  阅读(10)  评论(1)    收藏  举报