Codeforces Round #632 (Div. 2)F. Kate and imperfection(逆向、贪心、因子)

9 篇文章 0 订阅
3 篇文章 0 订阅

前言:用思维干掉一道2200的题,很开心。这里提供一个nlogn的逆向思维方法。


题目传送门

F. Kate and imperfection
  题目类型:数学、因子、贪心、逆向思维。
  解析:感觉从size从2到n不好想,反过来想一下,设g为最大的gcd,当size==n,此时g必定是n/2,想使答案缩小,就要把g的倍数删到只剩一个,贪心的想,从大的删。从n/g* g一直删到2*g。
  复杂度方面,相当于把2~n/2的倍数都过一遍,略小于调和级数nlogn。

  code:

void solve(){
    for(ll i = 1 ; i <= n ; ++i)
        vis[i] = 1;
    ll now = n , yz = n/2;
    while(now >= 2){
        if(yz == 1){
            ans[now--] = 1;
        }else {
            for(ll maxx = n/yz*yz ; now >= 2 && maxx > yz ; maxx -= yz){
                if(!vis[maxx])continue;
                ans[now--] = yz;
                vis[maxx] = 0;
            }
            yz--;
        }
    }
    for(ll i = 2 ; i <= n ; ++i)
        printf("%lld ",ans[i]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值