打卡信奥刷题(550)用C++信奥P7183[普及组/提高] [CRCI2008-2009] NOP

[CRCI2008-2009] NOP

题目描述

Mirko 购买了新的微处理器。

不幸的是,他发现为旧处理器编写的许多程序在新处理器上无法运行。

在深入了解这两种处理器说明书后,他发现了原因。

为了更快地工作,新处理器对程序的机器代码施加了某些约束,而这些约束在以前的模型中是不存在的。

处理器的机器代码由顺序执行的指令组成。 每个指令使用一个字节的存储器。

同样,指令可以具有 0 0 0 个或多个参数,每个参数都使用一个额外的内存字节。在机器代码中,参数紧随指令之后。

当设置为文本格式时,机器代码指令为大写字母,而参数为小写字母。 例如:

该程序由四个指令组成:第 1 1 1 个使用三个参数,第 2 2 2 个使用两个参数,第 3 3 3 个不使用,第四个使用四个参数。 该程序使用 13 13 13 个字节的内存。

新的处理器模型以四字节的块为单位获取内存,因此每条指令必须从可被四整除的内存地址开始(内存中的第一个字节为地址 0 0 0)。

我们可以将 NOP(No Operation,即无操作)指令插入旧程序中,这些指令不执行任何操作。

指令 A A A B B B C C C D D D 现在位于内存位置 0 0 0 4 4 4 8 8 8 12 12 12,这满足了处理器的约束。

请你编程求出最少需要插入的 NOP 数量。

输入格式

一行一个字符串 s s s,表示旧处理器模型编写的程序的机器代码。

该程序将始终以 1 1 1 条指令开始,即机器码中的第一个大写字母。 如果一条指令在机器代码中多次出现,则它将始终使用相同数量的参数。

输出格式

一行一个正整数 a n s ans ans,表示最少需要插入的 NOP 数量。

样例 #1

样例输入 #1

Abcd

样例输出 #1

0

样例 #2

样例输入 #2

EaEbFabG

样例输出 #2

5

样例 #3

样例输入 #3

AbcbBccCDefgh

样例输出 #3

4

提示

数据规模及约定

∣ s ∣ |s| s 为字符串 s s s 的字符数,对于 100 % 100\% 100% 的数据, 1 ≤ ∣ s ∣ ≤ 200 1\le |s| \le 200 1s200

说明

C++实现

#include
#include
using namespace std;
int ans;
char c[210];
int main(){
scanf(“%s”,&c);
for(int i=0;i<strlen©;i++)
if(c[i]>=‘A’&&c[i]<=‘Z’&&(i+ans)%4!=0)
ans+=4-(i+ans)%4;
printf(“%d”,ans);
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值