TOTP


私信TA

用户名:dotcpp0661292

访问量:2474

签 名:

等  级
排  名 16596
经  验 799
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

统计每个阶乘的个数,记录最小的阶乘(记为maxv)。从最小的阶乘开始计算统计maxv的个数是否为(maxv+1)的倍数

如果是则进位  比如3!+3!+3!+3!+3!+3!+3!+3!==8*3!==2*4!   相当于4!增加了两个,向上循环执行该操作即可

如果不是那么就可以break了

注意事项:

参考代码:

#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N=1e5+10;
unordered_map<int,int> M;
int A[N];
int main(){
    int n;
    cin>>n;
    int maxv=2e9;
    for(int i=1;i<=n;i++) {
        cin>>A[i];
        M[A[i]]++;
        maxv=min(maxv,A[i]);
    }
    while (M.count(maxv)){
        if(M[maxv]%(maxv+1)==0) {
            if(M.count(maxv+1)==0) M[maxv+1]=M[maxv]/(maxv+1);
            else M[maxv+1]+=M[maxv]/(maxv+1);
            maxv++;
        }
        else break;
    }
    cout<<maxv;
}


 

0.0分

19 人评分

  评论区

  • «
  • »