luogu P2104 二进制

高精度——题解【洛谷P2104 二进制】 题目大意 维护一个NNN位二进制数,支持: +1 -1 *2 div 2 最后的结果(二进制) N<=5∗106N<=5∗106NO(N2)O(N2)O(N^2) 分析一下,乘除好搞,但加减麻烦: 加:万一最后一位为1,则显然是进位到最后面的一个0,然后把后面的所有1改为0 减:万一最后一位为0,则显然是借到最后面的一个1,然后把后面的所有0改为1 然后我考试时就... 阅读详情

@luogu

题目描述

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

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

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

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

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

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

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

输入输出格式

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

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

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

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

这题luogu评测机跑得太快以至于没卡掉纯模拟。标算做法是把二进制数放在一个栈里, * 和 / 操作就是对尾指针加一或减一,+和-操作对最后一位数加一或减一,但是要延迟进位,在最后处理。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#define N 11000000
#define ll long long
#define max(x,y) ((x)>(y) ? (x) : (y))
#define min(x,y) ((x)<(y) ? (x) : (y))
using namespace std;

inline int getint() {
    int t=0,p;
    char ch=getchar();
    for(;ch!='-' && !(ch>='0' && ch<='9');ch=getchar());
    if(ch=='-') p=-1,ch=getchar();
    else p=1;
    for(;ch>='0' && ch<='9';ch=getchar()) {
        t=t*10+ch-48;
    }
    return t*p;
}

string ans;
int n,m,a[N];
char s[5000010];

int main() {
    freopen("two.in","r",stdin);
    freopen("two.out","w",stdout);
    n=getint(),m=getint();
    int l=0,r=l+n;
    char ch;
    for(int i=0;i<n;i++) {
        for(ch=getchar();ch!='1' && ch!='0';ch=getchar());
        a[i]=ch-48;
    }
    scanf("%s",s);
    for(int o=0;o<m;o++) {
        if(s[o]=='*') {
            a[r++]=0;
            continue;
        }
        if(s[o]=='/') {
            r--;
            if(l==r) {
                a[r++]=0;
                continue;
            }
            if(a[r]<0) {  //处理进位
                a[r-1]+=(a[r]-1)/2;
                continue;
            }
            if(a[r]>1) {
                a[r-1]+=a[r]>>1;
                continue;
            }
            continue;
        }
        if(s[o]=='+') {
            a[r-1]+=1;
            continue;
        }
        if(s[o]=='-') {
            a[r-1]-=1;
            continue;
        }
    }
    int tmp;
    for(int i=r-1;i>l;i--) {
        if(a[i]<0) {       //处理进位
            tmp=(a[i]-1)/2;
            a[i-1]+=tmp;
            a[i]-=tmp*2;   //退1作2
        }
        if(a[i]>1) {
            a[i-1]+=a[i]>>1;  //大于1进位
            a[i]%=2;
        }
    }
    for(int i=l;i<r;i++) {
        ans+=(char)(a[i]+48);
    }
    cout<<ans<<endl;
    return 0;
}
【洛谷 for C++】P2141 珠心算测验 原题链接 我的思路: 这题最主要的问题在于避免重复计算(私以为这一点题目没有说得很明确) 举例来说,若数组是{1,2,3,4,5},其中1 + 4 = 2 + 3 = 5只能算作一个 之前想的几个方法都没能避免这种重复的计算,后来去看了题解吸收了一下思路,写出了AC代码如下 解释:sum数组是用来指示a数组中的值两两相加之后的值究竟有多少种可能,sum数组每个index对应的值是多少不重要(其实这... 阅读详情

相关推荐

洛谷P1176--路径计数2

题目描述 一个N×N的网格,你一开始在(1,1),即左上角。每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N),即右下角有多少种方法。 但是这个问题太简单了,所以现在有M个格子上有障碍,即不能走到这M个格子上。 输入格式 输入文件第1行包含两个非负整数N,M,表示了网格的边长与障碍数。 接下来MM行,每行两个不大于N的正整数x,y。表示坐标(x,y)上有障碍不能通过,且有1≤x, y≤n,且x,y至少有一个大于1,并请注意障碍坐标有可能相同。 输出格式 一个非负整数,为答案mod 100003

chengheng0629的博客 923

洛谷 P2104 二进制

P2104 二进制 题目描述 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 运算 3:将整个二进制数乘 2 运算 4:将整个二进制数整除 2 小Z很想知道运算后的结果,他只好向你求助。 (Ps:为了简化问题,数据保证+...

HJ921004的博客 469

STM32F4+FreeRTOS实战:手把手教你移植LWIP2.1.2(含LAN8720配置避坑指南)

本文提供了一份详尽的实战指南,手把手教你如何在STM32F4平台结合FreeRTOS实时操作系统,成功移植轻量级TCP/IP协议栈LWIP 2.1.2。文章重点剖析了硬件驱动层LAN8720 PHY芯片的配置要点与常见“坑点”,并深入讲解了LWIP与FreeRTOS的深度整合、关键配置及稳定性优化策略,旨在帮助开发者构建稳定可靠的产品级嵌入式网络功能。

ik678901234的博客 1063

P2104 二进制

很气哦这道题。 这道题虽然看上去好像是考你的高精度,其实只是考你二进制和字符串。 不说别的,看这个\(1 \leq n,m \leq 5 \times 10^6\),问你虚不虚? 所以我们要找一个效率极高的算法弄过这个二进制。 其实最省时间的应该是操作3和4,乘2和除以2只需要左移和右移即可。但我没想出来 然后是二进制下的加法和减法,可以直接按照定义模拟。 但是题目有一个很重要的点: ...

dianshu0741的博客 310

数电实训:万年历

万年历

Lmyccq的博客 1万+

自动驾驶中的多传感器融合实战:用卡尔曼滤波搞定毫米波雷达与摄像头航迹对齐

本文深入探讨了自动驾驶中多传感器融合的实战技术,重点介绍了如何使用卡尔曼滤波实现毫米波雷达与摄像头的航迹对齐。通过分析传感器特性差异、时空同步挑战及工程化实现步骤,提供了包括状态向量定义、观测矩阵设计和故障检测机制在内的完整解决方案,最终实现0.15米以内的高精度航迹对齐。

weixin_28728495的博客 410

二进制基础理解

一.二进制基础理解平时使用100,23等来进行日常交流。我们人看得懂(可能因为我们有10个手指头的原因吧),但计算机是不认识,计算机只能识别二进制的数字,二进制由1和0组成(1在硬件上面表示为高电压,0为低电压)二.二进制转换为十进制那如何看懂二进制就是我们第一个需要解决的问题,这里我们需要将二进制转换为十进制来看首先我们需要了解我们日常使用的十进制的计算原理,拿101来说,然后我们将所有位上的数字进行相加从这里例子可以得到1.叫几进制,对应的幂的底数()就是几。

little_startoo的博客 3054

Android逆向实战:通过smali/baksmali动态注入DEX逻辑

本文详细介绍了在无源码条件下对Android应用进行动态逻辑注入的实战方法。通过使用smali和baksmali工具对DEX文件进行反编译、修改与重打包,实现在目标方法中插入自定义代码(如日志打印),并分享了定位目标、处理寄存器、避免常见错误的实用技巧与避坑指南。

weixin_29008691的博客 363

打卡信奥刷题(1153)用C++实现信奥 P2104 二进制

小 Z 最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下4种基础运算:运算1:将整个二进制数加1。运算2:将整个二进制数减1。运算3:将整个二进制数乘2。运算4:将整个二进制数整除2。小 Z 很想知道运算后的结果,他只好向你求助。(Ps:为了简化问题,数据保证操作不会导致最高位的进位与退位)

Loge谈信奥--一个专注于信奥人的博客 5725

手把手教你学基于 Linux 的 NPU 固件开发-第 10 讲:可靠性设计(RAS)——让系统坚如磐石错误检测、纠正与上报机制(ECC、Parity)

组件推荐保护机制备注HBM/DDRScrubbing必须开启,定期巡检片上 SRAMECC(权重/激活值),Parity(指令)权衡面积与可靠性计算单元ABFT或DMR(关键路径)防止计算逻辑错误片上网络CRC重传保证数据传输完整性系统软件AER 上报CE 监控自动恢复闭环管理,杜绝 SDC运维策略预测性维护Checkpoint变被动为主动核心心法(信任硬件,但必须验证。在纳米尺度下,错误是必然发生的物理现象。

MHD0815的博客 90

基于STM32的汽车主门电动窗开关系统设计方案

以下是基于 STM32CubeMX 和 HAL 库的示例代码,可实现基本的功能。

weixin_42300449的博客 994

对位运算 负数位运算的理解

对位运算 负数位运算的理解 位运算大法好… 在这里,我拿洛谷P2104的题当作例题 题目: 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 运算 3:将整个二进制数乘 2 运算 4:将整个二进制数整除 2 小Z很想知道运算后的结果,他只好向你求助。 (Ps:为了简化问题,数据保证+,-操作不会导致最高位的进位与退位) 输入格式 第一行两个正整数 n,m,表示原二进制数的长度以及运算数

weixin_50547586的博客 1664

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 523

将任一整数转换为二进制形式

(1)方法1-----递归方法调用---通过进制转换规则进行 //将任一整数转换为n进制形式----进制转换法 //注意:对于要转换成16进制形式,必须考虑到10,11,12,13,14,15必须用英文字母A,B,C,D,E,F表示 #include using namespace std; int main() { void print10_2(int n,int d); //函数声

smallgyy的专栏 6666

CloudCompare 二次开发(41)——点云重建三维凸包并计算体积

本文介绍了如何结合PCL与CloudCompare实现点云三维凸包的构建与可视化。通过代码集成,在CloudCompare界面添加功能按钮,实现点云数据转换、凸包构建、体积计算以及可视化显示。具体步骤包括:1) 在UI中添加功能按钮;2) 将点云数据转换为PCL格式;3) 使用PCL的ConvexHull算法构建三维凸包;4) 计算并显示凸包体积;5) 将结果以点云和网格形式可视化显示。最终实现了点云凸包的自动构建与体积计算功能,为点云处理提供了实用工具。

点云侠的博客 193

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C - 二进制换十进制(简单)把一个二进制数转化为十进制数。输入格式第一行一个正整数 n, (1≤n≤30),表示二进制数的长度。第二行一个二进制数。输出格式输出一个整数,表示对应的十

#include<stdio.h> #include<math.h> int main(void) { int n,i,s=0; char a[30]; scanf("%d",&n); getchar(); for(i=0;i<n;i++){ scanf("%c",&a[i]); } for(i=0;i<n;i++){ if(a[i]=='1') s+=pow(2,n-i-1); else { ...

m0_62305442的博客 702

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

P4574 [CQOI2013]二进制A+B

传送门 数位DP 考虑从右边最小的一位,一位一位填数,填到最大一位 对于 a' b' 各可填 0 或 1 但是发现如果 a' b' 都填一,更高一位会进1 所以要多一维表示更高一位是否为 1 那么设 f [ i ] [ j ] [ k ] [ l ] [ 0/1 ] 表示填到第 i 个数,a' 填了 j 个 1,b' 填了 k 个 1,c' 有了 l 个1,更高一位(第i+1位)是否有...

weixin_30535565的博客 129

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

用C++写洛谷P1028 [NOIP2001 普及组] 数的计算

题目描述 我们要求找出具有下列性质数的个数(包含输入的正整数nn)。 先输入一个正整数nn(n \le 1000n≤1000),然后对此正整数按照如下方法进行处理: 不作任何处理; 在它的左边拼接一个正整数,但该正整数不能超过原数,或者是上一个被拼接的数的一半; 加上数后,继续按此规则进行处理,直到不能再加正整数为止。 输入格式 一行,一个正整数nn(n \le 1000n≤1000)。 输出格式 一个整数,表示具有该性质数的个数。 输入输出样例 输入 #1...

weixin_51717063的博客 1836

洛谷网校 题解 之【P2084 进制转换】

题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的数N转换成十进制表示的式子。 注意:当系数为0时,该单项式要省略。 输入输出格式 输入格式:   两个数,M和N,中间用空格隔开。   输出格式:   共一行,一个十进制表...

qq_41713240的博客 2237

二进制表示

/* 问题描述:给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 "ERROR"。 来源:LintCode 作者:syt 日期:2017-9-9 思路: 方法3,将整数部分和小数部分分开计算,由于int整数可能会越界,使用long long,分别计算后,合并计算结果,LintCode通过 方法2,在论坛上看到有人这么做,根

孙小小子的博客 454

题解洛谷P1002(c++解法)过河卒

题目传送门 大家看到这题一般会用搜索来做,也许调试时全过,但运行时当n、m=15时就会超时 其实,本题稍加分析就能发现,要到达棋盘上的一个点,只能从左边或上面过来(以下称为左点和上点) 所以,根据加法原理,到达某一点的路径数目,就等于到达其相邻的上点和左点的路径数目之和,因此我们可以使用逐列(或逐行)递推的方法来求出从起点到终点的路径数目 障碍点(马的控制点)也完全适用,只要将到达该店的路径数目设...

dogcat987的博客 1230

luogu P2117 小Z的矩阵(结论题)

题意 题解 这题有点水。 我们发现对答案有贡献的实际上只有左上到右下的对角线上的数。 因为不在这条对角线上的乘积都要计算两遍,然后%2就都没了。。。 然后就做完了。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cma...

Aaronliu17008的博客 192

信与信封问题

来自codevs fzuoj codevs fzuoj 题目描述 Description John先生晚上写了n封信,并相应地写了n个信封将信装好,准备寄出。但是,第二天John的儿子Small John将这n封信都拿出了信封。不幸的是,Small John无法将拿出的信正确地装回信封中了。 将Small John所提供的n封信依次编号为1,2,…,n;且n个信封也依次编号为1,2...

Ansicht's Blog 815

B 酱的无向图 题解

2 B 酱的无向图 2.1 题目描述 B 酱有个 n 个节点的无向图,初始时图中没有边。他依次向图中加 了 m 条无向边,并询问你加入每条边后图中桥的个数是多少。被删除后 能使图中连通块个数增加的边就称为桥。注意图中可能会出现重边及自环。 2.2 输入格式 输入第1行为三个正整数 n, m, p,p 的含义将在输出格式中介绍。 接下来 m 行,每行两个正整数 u, v,表示新...

Ansicht's Blog 632
上一篇: 题解 luogu P2484 【[SDOI2011]打地鼠】BZOJ2241 O(N^2.5)
下一篇: Sublime text 3配置C++
Ansicht
博客等级 码龄9年 6粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值