[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 1≤∣s∣≤200。
说明
- 本题满分 30 30 30 分。
- 本题译自 COCI2008-2009 CRCI2008-2009 NOP,译者 @tearing。
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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容