博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#113. 【UER #2】手机的生产
阅读量:4462 次
发布时间:2019-06-08

本文共 2322 字,大约阅读时间需要 7 分钟。

 

由于电信技术的发展,人人都可以通过手机互相联系。有一位电信大佬最近想生产一大批手机,然而从生产线上一台一台地生产实在太慢了,于是他想出了一个办法 —— 让手机自我复制。于是他给手机加上了一个内置的函数 fork()。手机的程序如果调用这个函数,那么手机会生产出一台完全一模一样的手机(包括程序运行状态),并且自己这台的函数返回值为 11,新手机的函数返回值为 00,然后两台手机都继续执行程序。(请注意黑体字内容)初始时,只有一台手机。接着,大佬让手机计算形如这样的表达式:fork() 
fork()
...
fork()其中
是二元运算符,为 && 或者 || 中的一种。例如:fork() && fork() || fork() && fork() && fork() || fork()两个运算都是左结合的,且 && 的优先级比 || 高,所以上面的那个表达式相当于:((fork() && fork()) || ((fork() && fork()) && fork())) || fork()对于表达式 a && b,手机会先计算 a 的值,如果为 00 那么不计算 b 的值(因为很重要所以说两遍,请注意这里不计算 b 的值),该表达式值为 00;否则计算 b 的值并将其值作为该表达式的值。对于表达式 a || b,手机会先计算 a 的值,如果为 11 那么不计算 b 的值(因为很重要所以说两遍,请注意这里不计算 b 的值),该表达式值为 11;否则计算 b 的值并将其值作为该表达式的值。表达式计算完成后,大佬制造出了数量惊人的手机,人类终于叩开了指数级工业制造的大门。一万万年后,一位考古学家调查了此次事件。他得到了大佬让手机计算的表达式。他想知道大佬当年究竟制造出了多少台手机。(包括初始的那台手机)你可以参照样例解释来更好地理解题意。输入格式第一行一个正整数 nn,表示表达式中的 fork() 的数量。接下来一行 n−1n−1 个用空格隔开的字符串,每个字符串为 “&&” 或者 “||”,依次表示表达式中对应位置的运算符。输出格式一行,一个整数表示制造出的手机的数量,你只用输出答案对 998244353998244353(7×17×223+17×17×223+1,一个质数)取模后的结果。样例一input2&&output3explanation共生产 33 台手机,过程如下:第 11 台手机开始计算 fork() && fork()。第 11 台手机开始计算 fork(),产生了第 22 台手机。第 11 台和第 22 台的 fork() 计算完成,第 11 台返回 11,第 22 台返回 00。第 11 台手机由于 fork() 返回值为 11,开始计算 fork() && fork() 右边的 fork(),产生了第 33 台手机。第 22 台手机由于 fork() 返回值为 00,于是 fork() && fork() 值为 00(跳过右边的 fork 的计算),程序结束。第 11 台和第 33 台的 fork() 计算完成,第 11 台返回 11,第 33 台返回 00。第 11 台手机由于 fork() 返回值为 11,于是 fork() && fork() 值为 11,程序结束。第 33 台手机由于 fork() 返回值为 00,于是 fork() && fork() 值为 00,程序结束。样例二input6&& || && && ||output15限制与约定测试点编号 nn的规模1 n=1n=12 n≤5n≤5345 n≤100n≤100678 n≤100000n≤100000910时间限制:1s1s空间限制:256MB
题干

先理解题意:

  给出一个逻辑运算式子(包括若干单元fork(),以及逻辑运算符)。

  由于优先级问题我们先把这个式子以“||”为界限分成若干组(在每一组内不同fork()之间用‘&&’ 连接)

  每运行一次fork()能在该位置产生另一部手机(注意它们不在同一条世界线上,产生后互不影响),新产生的手机在诞生位置的fork()上为一,(也就是说新产生的手机)进入下一组。

 

再深入一些:

  每部手机只在当前组能复制,而它产生的手机进入下一组复制。(当然开始时只有一部手机,然后,慢慢增多)。

#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MOD 998244353queue
q;int n,tot1,tot0,f[100009],cnt;char a[100009],c,cc;int main(){ scanf("%d",&n);// scanf("%c",&c); for(int i=1;i
代码

 

转载于:https://www.cnblogs.com/CLGYPYJ/p/7387817.html

你可能感兴趣的文章
CSS3学习笔记
查看>>
linux 如何指定nologin用户执行命令
查看>>
IIS7上部署Asp.Net4.0时的若干问题--请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理...
查看>>
BZOJ1290 : [Ctsc2009]序列变换
查看>>
jquery常用
查看>>
我在富士康挨踢了七年(十六. 跳楼年,终于认识了我自己)
查看>>
.net注册iis
查看>>
vs2017更新后web项目部分后台代码类没有颜色,也没有自动提示输入功能
查看>>
关于Orcale 11g 安装过程
查看>>
DevExpress WinForms使用教程:Ribbon性能
查看>>
Cacti完全使用手册 ( 让你快速个性化使用Cacti )
查看>>
Jmeter使用_StringFromFile函数需要添加编码方式
查看>>
20180418开发日志
查看>>
PCB SVN 服务端VisualSVN Server与TortoiseSVN
查看>>
mybatis动态SQL中的set标签的使用
查看>>
MySQL 5.6 & 5.7最优配置模板
查看>>
Java虚拟机各内存区域的位置及功能的介绍
查看>>
Android 中判断网络状态
查看>>
netty3升netty4一失眼成千古恨
查看>>
HTML设置表格
查看>>