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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电路的稳定性(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;
}
View Code

 

以上是关于电路的稳定性(codevs 2599 未结题)的主要内容,如果未能解决你的问题,请参考以下文章

20155211课程设计个人结题报告

结题报告

P1132 数字生成游戏 结题报告

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

创新项目结题报告范文3篇

常见的一些电路稳定性措施