C.绝命沙虫

  • 确实绝了我老命,每次碰到卡精度的东西冲不过去都会直接开摆 这次算是涨了记性,仔细看了一下double的精度问题才发现,double类型在计算时会转化为二进制故有损失,例如 double a = 3.0-2.6结果是0.3999999999999999,这就是精度损失故(m-1)是double类型也会有精度损失alt
  • 从此以后碰到卡精度的一律依靠*10将其化为整型再计算
using namespace std;
typedef long long ll;
ll n,t,ans,inf = 10000;
double m;
int main()
{
    cin>>t;
    while(t--){
        cin>>n>>m;
        ans=0;
        ll num = n,a=0,b=0;//a是红,b是绿
        ll mm=m*10;
        while(num){
            a=num*100;
            b=min(inf,num*10*(mm-10));
            ans+=floor(a/10);
            ans+=floor(b/10);
            num=floor(a/200);
        }
        cout<<ans<<endl;
    }
    return 0;
}