zoukankan      html  css  js  c++  java
  • 洛谷 P2104 二进制

    题目描述

    小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算:

    运算 1:将整个二进制数加 1

    运算 2:将整个二进制数减 1

    运算 3:将整个二进制数乘 2

    运算 4:将整个二进制数整除 2

    小Z很想知道运算后的结果,他只好向你求助。

    (Ps:为了简化问题,数据保证+,-操作不会导致最高位的进位与退位)

    输入输出格式

    输入格式:

     

    第一行两个正整数 n,m,表示原二进制数的长度以及运算数。

    接下来一行 n 个字符,分别为‘0’或‘1’表示这个二进制数。

    第三行 m 个字符,分别为‘+’,‘-’,‘*’,‘/’,对应运算 1,2,3,4。

     

    输出格式:

     

    一行若干个字符,表示经过运算后的二进制数。

     

    输入输出样例

    输入样例#1: 复制
    4 10
    1101
    */-*-*-/*/
    输出样例#1: 复制
    10110

    说明

    【数据规模和约定】

    对于 30%的数据,1 ≤ n,m ≤ 1000。

    对于 60%的数据,1 ≤ n,m ≤ 10^5。

    对于 100%的数据,1 ≤ n,m ≤ 5*10^6。

    【时空限制】

    2s/128M

    思路:模拟。

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int n,m;
    char a[10000000],b[10000000];
    int main(){
        scanf("%d%d",&n,&m);
        scanf("%s%s",a,b);
        n--;
        for(int i=0;i<m;i++){
            if(b[i]=='+'){
                int x=n;
                a[n]++;
                while(a[x]==50){ a[x]=48;a[x-1]+=1;x--; }            
            }
            if(b[i]=='-'){
                int x=n;
                if(a[n]==49)    a[n]=48;
                else while(a[x]==48){ a[x]=49;x--; }
                a[x]=48;
            }
            if(b[i]=='*'){    n++;a[n]=48; }
            if(b[i]=='/')    n--;
        }
        for(int i=0;i<=n;i++)    printf("%c",a[i]);
        cout<<endl;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    fail-fast以及Iterator对象
    LeetCode~1351.统计有序矩阵中的负数
    LeetCode~75.颜色分类
    LeetCode~5364. 按既定顺序创建目标数组
    LeetCode~945.使数组唯一的最小增量
    LeetCode~409. 最长回文串
    笔记: SpringBoot + VUE实现数据字典展示功能
    JSON parse error: Cannot deserialize value of type `java.util.Date` from String
    为什么要用location的hash来传递参数?
    初识Git
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8045064.html
Copyright © 2011-2022 走看看