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

前言:用思维干掉一道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]);
}

猜你喜欢

转载自blog.csdn.net/m0_45699242/article/details/121357951