题解 | 耕种时间到!

耕种时间到!

https://www.nowcoder.com/practice/06f09bafcf3740cf88c08629b0443a8e

void solve(){
    int n;cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
    int x;cin>>x;
    vector<int> rec(101);
    for(int i=1;i<=n;i++){
        for(int j=0;;j++){
            if(a[i]<x)break;
            if(a[i]==x){rec[j]+=(1ll<<j);break;}
            a[i]=(a[i]+2)/3;
        }
    }
    int maxl=0;
    for(int i=0;i<=100;i++){
        maxl=max(maxl,rec[i]);
    }
    cout<<maxl<<endl;
}

对于任意一个大于等于2的数,我们可以发现,经过 除三向上取余之后都不会等于他自身,那么我们可以计算每个数再经过多少论之后会等于三,假设k论之后恰好等于三,那么此数就会在第k论生成 2的k次方个产物,我们只要记录每一轮生成产物的数量即可,易知k不会太大,我们遍历每个数,在其对应的k处记录即可

全部评论
orZ
点赞 回复 分享
发布于 2025-11-02 21:57 江苏
%%%%
点赞 回复 分享
发布于 2025-11-02 21:56 江苏

相关推荐

评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务