codeforces1469D Ceil Divisions(构造题、规律题)

传送门
题解:其实就是发现规律来构造的题目,题目要 n + 5 n+5 n+5步构造完成,那么必然有很多操作是第 i i i个数除以第 i + 1 i+1 i+1个数,可以发现一个大数要想降下来,最少也就是 2 2 2步操作,其实也就是额外多 1 1 1步操作,那么最多只能多 5 5 5个数,这几个数之间必然又有关联,联想大概也能想到是根号下的运算之类,可以看到 2 e 5 2e5 2e5在最多三四次根号下就可以变为 2 2 2了。

int n;
vector<pair<int,int> >ans;
int main(){
    
    
    #ifdef io
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    rush(){
    
    
        cin>>n;
        ans.clear();
        while(n!=2){
    
    
            int next=ceil(sqrt(1.0*n));
            rep(i,max(3,next+1),n-1)ans.push_back({
    
    i,i+1});
            ans.push_back({
    
    n,next});
            ans.push_back({
    
    n,ceil(n*1.0/next)});
            if(next==2)break;
            else n=next;
        }
        int len=ans.size();
        pf(len);
        rep(i,0,ans.size()-1)pf2(ans[i].fi,ans[i].se);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/112193359