zoukankan      html  css  js  c++  java
  • A

    分析:首先一猜就是 (K=min{A[i]-A[i-1]}),验证就是后面的差Bk(i)-Bk(i-1)最多是1,然后加起来就是k。

    先平均分k组.
    再考虑剩下的怎么分。
    先关心差为k的那对数。
    a/k和(a+k)/k相差1
    a%k 和(a+k)%k其实是相等的,也就意味着多出来的1会分给同一组,就不会出现本来是1 2,加完1变成2 2的情况了

    如果差大于k,那么首先它们平均分完会相差至少1,
    然后,如果他们相差为1,那么(a+k+m)%k会大于(a)%k,如果相差更多,那么加1也不影响大小关系了.

    code

    #include <cstdio>
    #include <algorithm>
    #include <cmath> 
    #include <cstring> 
    #include <iostream> 
    #define MAXN 10005  
    
    
    using namespace std;
    
    int n, minn, ans=1e9, a[MAXN], b[MAXN], c[MAXN];
    
    
    int main()
    {
    
    char s[MAXN];
        scanf("%d%s", &n,s+1); 
        for(int i=0; i<=n; ++i) {
            scanf("%d", &a[i]);
            if(i) 
              ans=min(ans, abs(a[i]-a[i-1]));
        }
       cout<<ans<<endl;
        for(int i=0; i<ans; ++i) {
            for(int j=0; j<=n; ++j) {
                if(i<a[j]%ans) printf("%d ", a[j]/ans+1);
                else printf("%d ", a[j]/ans);
            }
            cout<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    计算器
    安卓第四周作业
    安卓第三次作业
    补10.21
    补:10.21
    增删改查
    android-數據庫
    安卓 -登陆界面
    android 第Ⅱ次作业
    第一个java代码
  • 原文地址:https://www.cnblogs.com/GUOGaby/p/15066184.html
Copyright © 2011-2022 走看看