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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值