• 【模拟】HHHOJ#251. 「NOIP模拟赛 伍」高精度


    积累模拟经验

    题目描述

    维护一个二进制数,支持如下操作

    • "+" 该数加 11
    • "-" 该数减 11
    • "*" 该数乘 22
    • "" 该数除 22 并下取整

    保证操作过程中不会出现负数

    输入格式

    第一行 n,m 表示原数和指令的长度

    第二行 一个 01 串,从高位到低位表示一个二进制数

    第三行 指令

    输出格式

    输出操作后的数,二进制,无前导 0


    题目分析

    延迟处理进退位

     1 #include<bits/stdc++.h>
     2 const int maxn = 5000035;
     3 
     4 int n,m,a[maxn<<1],lens;
     5 char s[maxn],t[maxn];
     6 
     7 int main()
     8 {
     9     scanf("%d%d%s%s",&n,&m,s+1,t+1);
    10     lens = n;
    11     for (int i=1; i<=n; i++) a[i] = s[i]-'0';
    12     for (int i=1; i<=m; i++)
    13     {
    14         if (t[i]=='+') a[lens]++;
    15         if (t[i]=='-') a[lens]--;
    16         if (t[i]=='*') a[++lens] = 0;
    17         if (t[i]=='/'){
    18             if (a[lens] < 0)
    19                 a[lens-1] -= (-a[lens]+1)>>1;
    20             else a[lens-1] += a[lens]>>1;
    21             a[lens--] = 0;
    22         }
    23     }
    24     for (int i=lens; i; i--)
    25         if (a[i] < 0)
    26             a[i-1] -= (-a[i]+1)>>1, a[i] = (-a[i])&1;
    27         else a[i-1] += a[i]>>1, a[i] = a[i]&1;
    28     for (int i=1; i<=lens; i++) putchar(a[i]+'0');
    29     return 0;
    30 }

    END

  • 相关阅读:
    andriod获得textView的值设置textView的text
    Android 自动生成的R类
    andriod 启动日历
    ggplot2在一幅图上画两条曲线
    R语言中动态安装库
    Python中的动态类
    Python中将dict转换为kwargs
    Apache负载均衡
    Python codecs小Tips
    Matlab求三重积分
  • 原文地址:https://www.cnblogs.com/antiquality/p/9614191.html
Copyright © 2020-2023  润新知