A 最小差值
签到题,注意一下中途开ll就行

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求最小差值
     * @param a int整型vector 数组a
     * @return int整型
     */
    int minDifference(vector<int>& a) {
        // write code here
        sort(a.begin(),a.end());
        long long ans=a[1]-a[0];
        for(int i=1;i<a.size();++i){
            ans = min(ans,(a[i]-a[i-1])*1LL);
        }
        return int(ans);
    }
};

B Tree IV
这是一个简单的模拟题,二叉树会分为两种层次。满层和未满层。两种的价值和其实都是一个等差数列。

class Solution {
    public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n long长整型 表示标准完全二叉树的结点个数
     * @return long长整型
     */
        const int mod = 998244353;
        long long tree4 (long long n) {
        long long cnt=1,ans=0,k=1;
        for(long long i=1;2*i<=n;i*=2,cnt++){
            ans=(ans+cnt*(i+i*2-1)*i/2)%mod;///满层
            k = i;
        }
        k*=2;
        return (ans+(k+n)*(n-k+1)/2%mod*cnt)%mod;///不满
    }
};

C、牛牛组数
简单模拟,最大一定是全部个位数和一个大数。于是在用数组模拟高精加减

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回最大和的字符串
     * @param x string字符串 即题目描述中所给字符串
     * @param k int整型 即题目描述中所给的k
     * @return string字符串
     */
     int a[200005]={0};
    string Maxsumforknumers(string x, int k) {
        // write code here
        sort(x.begin(),x.end());
        int t=x.length()-(k-1);
        int cnt=0;
        for(int i=k-1;i<x.length();i++){
            a[cnt++]=x[i]-'0';
        }
        int sum=0,l=0;
        for(int i=0;i<k-1;i++){
            sum=0;l=0;
            a[l]+=sum+x[i]-'0';
            while(a[l]>=10){
                a[l]=a[l]%10;
                if(l+1>=cnt) cnt++;
                a[l+1]++;
                l++;
            }
           }
        string s1="";
        for(int i=cnt-1;i>=0;i--){
            s1+='0'+a[i];
        }
        return s1;
    }
};

D、
这题首先一看冒出的是这个公式 ans = (ans+(num/i)*(num%i)%mod)%mod;

但一看数据范围就知道我们不能用O(n)的解法,于是要开始寻找规律
我们可以发现会有一段一段的num/i是相等的,而且余数是等差的于是就有了这个
r = num/(num/l);
ans = (ans+((num%l+num%r)(r-l+1)/2)%mod(num/l)%mod)%mod;
于是程序就出来了

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回1-n的所有k*m的和
     * @param num long长整型 正整数 n
     * @return long长整型
     */
    const int mod = 1e9+7;
    long long cowModCount(long long num) {
        // write code here
        long long ans=0;
        for(long long l=1,r;l<=num;l=r+1){
            //ans = (ans+(num/i)*(num%i)%mod)%mod;
            r = num/(num/l);/// /完为同一个的个数 而且余数是等差的 
            ans = (ans+((num%l+num%r)*(r-l+1)/2)%mod*(num/l)%mod)%mod;
        }
        return ans%mod;
    }
};