˼·£ºÃ¿¸öÊýÈ¡ËûµÄ¶þ½øÖÆÎ»£¬¶ÔÓÚÿһ룬ÎÒÃÇÇóËû×îºó³öÏÖ1µÄ¸ÅÂÊ£¬ÄÇô×îºóµÄÆÚÍû¾ÍÊÇΪ1µÄ¸ÅÂʳËÒÔ¸ÃλµÄÊ®½øÖÆÊý£¬ÀÛ¼Ó¼´¿É¡£ Ï뵽״ѹ¾ÍÊÇË®Ìâ¡ #include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cmath> #include <cstring> #include <queue> #include <set> #include <vector> #include <stack> #include <map> #include <iomanip> #define PI acos£¨-1.0£© #define Max 2505 #define inf 0x7fffffff #define LL£¨x£© £¨ x ¡¶ 1 £© #define RR£¨x£© £¨ x ¡¶ 1 | 1 £© #define REP£¨i,s,t£© for£¨ int i = £¨ s £© ; i <= £¨ t £© ; ++ i £© #define ll long long #define mem£¨a,b£© memset£¨a,b,sizeof£¨a£©£© #define mp£¨a,b£© make_pair£¨a,b£© #define PII pair<int,int> #define bug puts£¨"here"£© using namespace std; #define N 222 double dp[22][N] ;//µÚiλµÚj¸öÊýÊÇkµÄ¸ÅÂÊ¡£ int a[N] ; char b[N] ; double p[N] ; int n ; int main£¨£© { int ca = 0 ; while£¨cin ¡· n£©{ for £¨int i = 0 ; i <= n ; i ++ £©{ scanf£¨"%d",&a[i]£© ; } for £¨int i = 1 ; i <= n ; i ++ £©{ cin ¡· b[i] ; } for £¨int i = 1 ; i <= n ; i ++ £©{ cin ¡· p[i] ; } for £¨int i = 0 ; i <= n ; i ++ £©{ for £¨int j = 0 ; j <= 20 ; j++ £©{ for £¨int k = 0 ;k < 2 ; k ++ £© dp[j][i][k] = 0 ; } } double ans = 0 ; for £¨int i = 0 ; i <= 20 ; i ++ £©{ if£¨a[0] & £¨1 ¡¶ i£©£© dp[i][0] = 1 ; else dp[i][0][0] = 1 ; for £¨int j = 1 ; j <= n ; j ++ £©{ dp[i][j] = dp[i][j - 1] * p[j] ;//¸Ãλ²»È¡ dp[i][j][0] = dp[i][j - 1][0] * p[j] ;//¸Ãλ²»È¡ if£¨a[j] & £¨1 ¡¶ i£©£©{//È¡¸Ãλ if£¨b[j] == '&'£©{ dp[i][j] += dp[i][j - 1] * £¨1 - p[j]£© ; dp[i][j][0] += dp[i][j - 1][0] * £¨1 - p[j]£© ; } else if£¨b[j] == '|'£©{ dp[i][j] += dp[i][j - 1] * £¨1 - p[j]£© ; dp[i][j] += dp[i][j - 1][0] * £¨1 - p[j]£© ; } else { dp[i][j] += dp[i][j - 1][0] * £¨1 - p[j]£© ; dp[i][j][0] += dp[i][j - 1] * £¨1 - p[j]£© ; } } else {//ͬÀí if£¨b[j] == '&'£©{ dp[i][j][0] += dp[i][j - 1] * £¨1 - p[j]£© ; dp[i][j][0] += dp[i][j - 1][0] * £¨1 - p[j]£© ; } else if£¨b[j] == '|'£©{ dp[i][j] += dp[i][j - 1] * £¨1 - p[j]£© ; dp[i][j][0] += dp[i][j - 1][0] * £¨1 - p[j]£© ; } else { dp[i][j][0] += dp[i][j - 1][0] * £¨1 - p[j]£© ; dp[i][j] += dp[i][j - 1] * £¨1 - p[j]£© ; } } } ans += £¨1 ¡¶ i£© * dp[i][n] ; } printf£¨"Case %d:\n%.6f\n",++ca ,ans£© ; } return 0 ; } |