• 牛客多校第七场B题


    题目链接 https://ac.nowcoder.com/acm/contest/5672/B

    题意

      比较晦涩,意思大概是,给定 n 和 m 。问你要一个序列。 这个序列尽可能短,同时令其字典序尽可能小。这个序列满足,可以将其划分为n个组使其值之和相等。也能划分为m个。

    做法

      逐步缩小问题的规模。对于一对 n(<)m   首先知道当m是n的倍数时,只需要将序列分为m组每组为n即可。当m不为n的倍数时。可以取k为小于m的最大的n的倍数。将序列先划分出k组每组为n的组。然后剩下了(m-k)*n个。 这样 就编成了 m-k与 n时的问题,同样的问题求解即可。类似于递归的思想。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int MAX_N=2e6+10;
    const int INF=0x3f3f3f3f;
    const LL MOD=1e9+7;
    int n,m;
    vector<int>ans;
    void solve(){
        while(n){
     
            int tmp=m-m%n;
            for(int i=1;i<=tmp;i++){
                ans.push_back(n);
            }
            m=m%n;
            if(n>m)swap(n,m);
        }
        int len=ans.size();
        printf("%d
    ",len);
        for(int i=0;i<len;i++){
            printf("%d ",ans[i]);
        }
        printf("
    ");
     
    }
    int main(){
        //ios::sync_with_stdio(false);
        //cin.tie(0),cout.tie(0);
        //freopen("1.in","r",stdin);
        //cout<<sqrt(29400)<<endl;
        int test;
        scanf("%d",&test);
        while(test--){
            ans.clear();
            scanf("%d%d",&n,&m);
            if(n>m)swap(n,m);
            solve();
        }
    }
    rush!
  • 相关阅读:
    log4j的使用
    关于spring读取配置文件的两种方式
    BeanUtils组件的使用
    javaee 自定义标签实战
    javaweb中的标签的核心标签库的常用标签
    对接口的思考
    二分查找
    java抽象类
    多例集合
    js中for循环的研究
  • 原文地址:https://www.cnblogs.com/LH2000/p/13417100.html
Copyright © 2020-2023  润新知