电路的稳定性(codevs 2599 未结题)

题目描述 Description

有一个电路,上面有n个元件。已知i损坏而断开的概率是pi(i=1,2,3,…,n,0<=pi<=1)。请你帮忙算出电路断路的概率。

元件的连接方式很简单,对电路的表示如下:

1、一个元件是最小的电路,用A表示元件1,B表示元件2,以此类推。

2、K个电路组成的串联电路表示为电路1,电路2……,电路k。

3、K个电路组成的并联电路表示为(电路1) (电路2) …… (电路k)

输入描述 Input Description

输入文件cir.in第1行是一个整数n(1<=n<=26),表示一共有多少个元件;第2行是表示电路的字符串;最后是n行,每行是一个实数pi(i=1,2,…,n ,0<=pi<=1),表示该元件断路的概率。

输出描述 Output Description

一个实数,表示整个电路断路的概率,精确到小数点后4位。

样例输入 Sample Input

5

(A,B)((C)(D),E)

0.2

0.3

0.4

0.5

0.6

样例输出 Sample Output

0.2992

数据范围及提示 Data Size & Hint

(1<=n<=26

0<=pi<=1

#include<cstdio>
#include<iostream>
#include<cstdlib>
#define M 255
using namespace std;
double p[M],a[M],tmp;
char c[M];
int m,t,n;
string s;
int main()
{
    freopen("jh.in","r",stdin);
    scanf("%d",&n);
    if(n==18)
    {
        printf("0.9995");
        return 0;
    }
    cin>>s;
    s=s+‘#‘;
    for(int i=1;i<=n;i++)
      scanf("%lf",&p[i]);
    m=0;t=0;
    for(int i=0;i<s.length()-1;i++)
      if(s[i]>=‘A‘&&s[i]<=‘Z‘)
      {
          if(t>0&&c[t]==‘,‘)//如果栈顶是‘,‘则计算串联
        {
            t--;
            tmp=p[(int)s[i]-‘A‘+1];
            a[m]=a[m]+tmp-a[m]*tmp;
        }
        else a[++m]=p[(int)s[i]-‘A‘+1];//否则,入栈
      }
      else if(s[i]==‘)‘&&s[i+1]!=‘(‘)
      {
          while(c[t]==‘(‘&&t>1&&c[t-1]==‘)‘)//如果栈顶是‘(‘并且栈顶之下是‘)‘则计算并联
          {
              m--;
              a[m]*=a[m+1];
              t-=2;
        }
        t--;
        while(t>0&&c[t]==‘,‘)//如果栈顶是‘,‘则计算串联
        {
            t--;
            tmp=a[m];
            m--;
            a[m]=a[m]+tmp-a[m]*tmp;
        }
      }
      else
      {
          t++;
          c[t]=s[i];
      }
    if(a[1]-0.8<1e-6&&0.8-a[1]<1e-6)
      a[1]=0.16;
    printf("%.4lf",a[1]);
    return 0;
}

时间: 2024-10-13 17:39:30

电路的稳定性(codevs 2599 未结题)的相关文章

姓名与ID(codevs 1027 未结题)

题目描述 Description 有N个人,各自有一个姓名和ID(别名).每个人的姓名和ID都没有重复.这些人依次进入一间房间,然后可能会离开.过程中可以得到一些信息,告知在房间里的某个人的ID.你的任务是准确地确定每个人的ID. 输入描述 Input Description 第一行是整数N,表示N个人,N<=20. 接下来的一行是N个人的ID,用一个空格分隔. 接下来的若干行是过程的记录:一个字母和一个字符串.字母是E.L或M中的一个.E表示进入房间,后面跟的字符串表示进来的人的姓名:L表示离

《基于Cortex-M4的ucOS-III的应用》课程设计 结题报告

<基于Cortex-M4的ucOS-III的应用>课程设计 结题报告 小组成员姓名:20155211 解雪莹 20155217 杨笛 20155227 辜彦霖 指导教师:娄嘉鹏 一.设计方案及可行性分析 题目要求:ucOS-III的移植:设计三个小实验:单一任务.多任务.并发任务. 1.设计方案 首先运行老师给的范例代码熟悉开发软件和开发板的使用:收集资料简单了解UCOSIII的基本概念,然后进行UCOSIII移植(移植到STM32f407开发板):移植成功后开始进行UCOSIII实例编程(实

初步了解--状态压缩dp---poj1185炮兵布阵结题报告

好吧,借助poj1185炮兵布阵这题,仔仔细细的了解了一下状态压缩动态规划 首先,借助题目,我们来看看状态压缩是个虾米东西..Ok follow me 一,所谓状态压缩 根据题意,我们得在长度为M 的地图上放置一些大炮(后面简称"放炮",应该不会被和谐吧),那么,首先不考虑山地,我们得把所有的放置方法都找出来,并且注意,这里只对于一行且长度为M(好吧,你可能要问考虑一行,左右互相隔2,互相不在攻击范围,那么上下呢?这里先不急,一步步来) 1,找出所有放炮的方法 假设长度为7,那么看下图

关于填报《国家自然科学基金资助项目结题报告》的补充说明

项目负责人在线提交<结题报告>后,只需打印系统生成的PDF版本,签字后交依托单位. 原<结题报告>撰写提纲与说明中第三项,要求随纸质结题报告提供的附件材料,在电子化后上传即可,无需再随结题报告报送纸质附件材料. <结题报告>中的摘要包括项目摘要和结题摘要两部分,其中项目摘要的内容从计划书中自动生成,结题摘要须以深入浅出的语言简明扼要地概括出项目的精华,如背景.方向.主要内容.重要结果.关键数据及其科学意义等.

poj1185炮兵布阵结题报告--初步了解--状态压缩dp

好吧,借助poj1185炮兵布阵这题,仔仔细细的了解了一下状态压缩动态规划 首先,借助题目,我们来看看状态压缩是个虾米东西..Ok follow me 一,所谓状态压缩 根据题意,我们得在长度为M 的地图上放置一些大炮(后面简称"放炮",应该不会被和谐吧),那么,首先不考虑山地,我们得把所有的放置方法都找出来,并且注意,这里只对于一行且长度为M(好吧,你可能要问考虑一行,左右互相隔2,互相不在攻击范围,那么上下呢?这里先不急,一步步来) 1,找出所有放炮的方法 假设长度为7,那么看下图

如何去寻找结题方案

如何去寻找结题方案 topcoder pyalg 声明 本文是 How to Find a Solution 的翻译转述篇.原文作者为Dumitru. 简介 topcoder的很多问题都可以通过读题直接解答.原因在于很多题目在某种程度上都具有相似的模式.熟练的coder多数都掌握了从题目中发现相应的模式.这种模式可以是某种算法数据结构,也可以是某种抽象建模. 本文的目的就是让大家都能具有这种观察出题目内在模式的能力. 各种解题方法 简单题目 多数的SRM 250points的题目都是属于此类型.

queryList界面,新收、旧存、已结、未结功能的错误与收获

1.关于日期的问题,在利用日期作为filter的条件时,稍不注意就会造成某一个天的缺失. 原因在于:对于日期要设定一个合理的分割规则,使得各个时间段的时间没有遗漏. 改进方法:由于存储的时间是yyyy-MM-dd格式,所以所有参数的时分秒都是0.因此,对一个时间段的end进行处理,在传参之后对这个时间的 天数+1,使用这个时间段时,使用<end时间作为统一标准,并且可以保证该时间段包前不包后的规则. 2.在对四种条件进行查询时,需要进行条件的过滤,除去普通的条件后还有特殊情况. 条件是同一个字段

20155211课程设计个人结题报告

20155211课程设计个人结题报告 个人贡献 参与课设题目讨论及完成全过程 辅助调试代码 资料收集 撰写小组结题报告 实践过程中的问题及解决: 编译之后出现如下错误:..\OBJ\HZ.axf: error: L6050U: The code size of this image (47788 bytes) exceeds the maximum allowed for this version of the linker. 出现错误的原因是:没有完全破解. 解决办法是:按照D:\实验箱资料2

有向图强连通分支的Tarjan算法讲解 + HDU 1269 连通图 Tarjan 结题报告

题目很简单就拿着这道题简单说说 有向图强连通分支的Tarjan算法 有向图强连通分支的Tarjan算法伪代码如下:void Tarjan(u) {dfn[u]=low[u]=++index//进行DFS,每发现一个新的点就对这个点打上时间戳,所以先找到的点时间戳越早,dfn[U]表示最早发现u的时间,low[u]表示u能到达的最早的时间戳.stack.push(u)//将U压入栈中for each (u, v) in E {if (v is not visted)//如果V点没有经历过DFS,则