zoukankan      html  css  js  c++  java
  • [CF1301C] Ayoub's function

    Description

    (f(s)) 表示 (01)(S) 中多有少个子串中至少有一个 (1)。对于长度为 (n) 且恰好有 (m)(1)(01) 串,求 (f) 的最大值为多少。

    Solution

    要最大化 (f),对于给定的 (n,m) 就是要最小化 (sum x_i),其中 (x_i) 代表第 (i) 段连续 (0) 的长度。

    即将 (n-m)(0) 分成 (m+1) 份,每份的数量可以是任意非负整数,最小化 (sum x_i),显然尽可能均匀分配是最优的,即保证 (max - min le 1)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    const int N = 1000005;
    
    int f(int d,int r,int k)
    {
        return r*(d+1)*(d+1)+(k-r)*d*d;
    }
    
    int g(int s,int k)
    {
        return f(s/k,s%k,k);
    }
    
    void solve()
    {
        int n,m;
        cin>>n>>m;
        cout<<(n*(n+1)-n+m-g(n-m,m+1))/2<<endl;
    }
    
    signed main()
    {
        int t;
        cin>>t;
        while(t--) solve();
    }
    
  • 相关阅读:
    flex 自定义事件
    ssis 不停执行的方法
    动态修改大小的Panel用户控件
    ssis 写文件到数据库
    sqlserver CheckSum
    poj1423
    poj1860
    poj1862
    poj1426
    poj1234
  • 原文地址:https://www.cnblogs.com/mollnn/p/13984637.html
Copyright © 2011-2022 走看看