zoukankan      html  css  js  c++  java
  • CF1166D——数学公式思维题

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    ll ans[100],a,b,m;
    
    /* b=2^(n-2)a + 2^(n-3)r2 + 2^(n-4)r3 + ... + rn-1 + rn 
      可以推出这么个公式,然后枚举n(2-50)即可
      从r2开始贪心求最大的r2,然后后面的ri都可以依次确定下来
    */ int solve(ll a,ll b,ll m,ll n){//长度为n是否可行 ans[1]=a; for(int i=0;i<n-2;i++){ a<<=1; if(a>b)return 0; } b-=a; ll p=(ll)1<<(n-2); if(b<p || b>m*p || b/p>m)return 0; b-=p; for(int i=2;i<n;i++){ ll x=b>>(n-i-1); x=min(x,m-1); ans[i]=x+1; b-=x<<(n-i-1); } if(b<0 || b>m-1)return 0; ans[n]=b+1; ll sum=ans[1]; for(int i=2;i<=n;i++) ans[i]+=sum,sum+=ans[i]; cout<<n<<" "; for(int i=1;i<=n;i++) cout<<ans[i]<<" "; puts(""); return 1; } int main(){ int q;cin>>q; while(q--){ memset(ans,0,sizeof ans); cin>>a>>b>>m; if(a==b){ cout<<"1 "<<a<<endl; continue; } int flag=0; for(int i=1;i<=50;i++){ if(solve(a,b,m,i)){ flag=1; break; } } if(!flag)puts("-1"); } }
  • 相关阅读:
    运算放大器
    阻抗模型
    mysql优化
    tomcat调优
    jvm调优
    springboot使用
    deploy工程到nexus
    Spring data elasticsearch使用
    kibana使用
    笔记
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10896168.html
Copyright © 2011-2022 走看看