首页 > 其他分享 >2020年辽宁省省赛H 鸽子的浮点运算

2020年辽宁省省赛H 鸽子的浮点运算

时间:2022-10-06 23:44:30浏览次数:79  
标签:string temp 浮点运算 ll int 2020 ans 省赛 now

鸽子的浮点运算

模拟

就跟着题意模拟就好了

先读入,然后转成二进制,截断成 \(16\) 位,然后转成十进制 \(double\),最后计算,计算结果转成二进制截断成 \(16\) 位,然后输出

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;

string fl_to_string(double x)
{
    ll pre = (ll)x;
    string now = "";
    while(pre)
    {
        if(pre & 1) now = "1" + now;
        else now = "0" + now;
        pre >>= 1;
    }
    int f = now.size();
    x -= (ll)x;
    for(int i=0; i<50; i++)
    {
        x *= 2.0;
        if(x >= 1) {now += "1"; x -= 1.0;}
        else now += "0";
    }
    string ans = "0";
    if(f)
    {
        ll cnt = f + 14;
        string temp = "";
        while(cnt)
        {
            if(cnt & 1) temp = "1" + temp;
            else temp = "0" + temp;
            cnt >>= 1;
        }
        while(temp.size() < 5) temp = "0" + temp;
        ans += temp;
        ans += string(now, 1, 10);
    }
    else
    {
        ll way = 0;
        while(now[way] == '0') way++;
        ll cnt = 14 - way;
        string temp = "";
        while(cnt)
        {
            if(cnt & 1) temp = "1" + temp;
            else temp = "0" + temp;
            cnt >>= 1;
        }
        while(temp.size() < 5) temp = "0" + temp;
        ans += temp;
        ans += string(now, way + 1, 10);
    }
    return ans;
}

ll string_to_ll(const string &s, int l = 1, int r = 5)
{
    ll ans = 0;
    for(int i=l; i<=r; i++)
        ans = ans * 2 + s[i] - '0';
    return ans;
}

double string_to_fl(string s)
{
    ll way = string_to_ll(s);
    double ans = 1, res = 1.0;
    for(int i=6; i<s.length(); i++)
    {
        res *= 0.5;
        ans += res * (s[i] - '0');
    }
    for(int i=way; i<15; i++) ans /= 2.0;
    for(int i=way; i>15; i--) ans *= 2.0;
    return ans;
}

double f16(double x)
{
    string now = fl_to_string(x);
    return string_to_fl(now);
}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int op;
        double a, b;
        cin >> op >> a >> b;
        if(op == 1) cout << fl_to_string(a) << "\n";
        else
        {
            double ans = 0;
            double aa = f16(a), bb = f16(b);
            if(op == 2) ans = aa + bb;
            else ans = aa * bb;
            cout << fl_to_string(ans) << "\n";
        }
    }
    return 0;
}

标签:string,temp,浮点运算,ll,int,2020,ans,省赛,now
From: https://www.cnblogs.com/dgsvygd/p/16758858.html

相关文章

  • [BJDCTF2020]JustRE 1
        ......
  • Fuzor2020 WIN10 64位安装步骤
    fuzor安装包fuzor2020安装教程Fuzor2020WIN1064位安装步骤:1.先使用“网盘客户端”Fur20_CN_x64安装包到电脑磁盘里,并鼠标右击进行解压缩,安装前先断网电脑网络,然后找到“......
  • fuzor2020安装教程
    fuzor下载安装包fuzor2020安装教程Fuzor2020WIN1064位安装步骤:1.先使用“百度网盘客户端”下载Fur20_CN_x64安装包到电脑磁盘里,并鼠标右击进行解压缩,安装前先断网电脑网......
  • ECCV2020 | Unsupervised Batch Normalization
    计算机视觉研究院专栏作者:Edison_GBN的基本思想:因为深层神经网络在做非线性变换前的激活输入值(就是x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者......
  • 2020ICPC上海I - Sky Garden
    思维[I-SkyGarden_第45届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)(重现赛)@hzy0227(nowcoder.com)](https://codeforces.com/gym/103202/problem/I)题意有\(n\;(1<......
  • 2020ICPC沈阳I - Rise of Shadows
    剩余系Problem-I-Codeforces题意给定\(H,M,A\)\(2<=H,M<=10^9,\;0<=A<=\frac{H*M}2\)假设一个钟表有\(H\)小时,一小时有\(M\)分钟,求一天中有多少整数分钟,满......
  • 大盘点 | 2020年两篇目标跟踪算法最佳综述
    作者丨cynthiayawain编辑丨极市平台导读 我们对2020年全部计算机视觉综述论文进行了分方向梳理,本文为第四篇,目标跟踪方向。引言在过去的一年中,计算机视觉领域出现了许多优......
  • 10/3: 牛客 2020 tg1
    挂大分,现在做题面临一个困境,就是有思路而不会实现。A一眼裴蜀定理,注意除以0的情况啊啊啊啊啊啊。B换个不同于题解的思路解释。每一次询问事实上就是把第\(l-1\)个操......
  • 做题记录整理图论2 P6591. [YsOI2020] 植树(2022/10/3)
    P6591.[YsOI2020]植树是一道相对比较简单的题,但是为什么还要对它进行总结呢?因为里面有一种先固定一个根来算子树大小,之后再进行计算的想法我之前似乎没有做过类似的题......
  • 【补档】CSP2020-J 游记
    (洛谷博客版本)突然发现两年前写的游记已经不知在哪个国家了,于是再写一个。本人坐标GD。去打的时候我才刚升五年级,OI才搞不到一年,刚学完裸dfs,所以没抱多大期望。初赛......