hiho 1166 高斯消元

2021-07-03 10:44:13 字數 1469 閱讀 2156

一道高斯消元題目

題意:給你乙個數列ai,(1<=i<=n);ai是0或1,現在你可以每次翻轉乙個區間,即將0變1,1變0,且每個區間被選擇的概率為

n(n-1)/2,問全變成0的翻轉次數期望是多少

思路:

另外,這個思路還有一些需要注意的地方,在確定這個方法是對的前提下,那麼d中的1的個數必然是偶數的,這樣的話直接對0列方程就要有限制條件(n+1)-i要是偶數才行,這樣算出來的數是對的詳見寫法1;或者直接對1來列方程,只對偶數個1進行列方程,詳見寫法2。

寫法1:

#include using namespace std;

#define rep(i,a,n) for (int i=a;i=a;i--)

typedef double ld;

const double eps = 1e-12;

int n,b[30],c;

ld g[30][30];

void gauss(int n)

} per(i,0,n)

}int main()

else if(i==n&&!((n+1-i)&1))

else if(!((n+1-i)&1))

}// for(int i=0;i<=n+1;i++)

// printf("%lf\n",g[i][n+2]);

// }

gauss(n+2);

// for(int i=0;i<=n+1;i++)

// printf("%lf\n",g[i][n+2]);

rep(i,1,n+1) scanf("%d",&b[i]);

rep(i,1,n+2) c+=b[i]!=b[i-1];

printf("%.10f\n",(double)g[n+1-c][n+2]);

return 0;

}

寫法二:

#include using namespace std;

#define rep(i,a,n) for (int i=a;i=a;i--)

typedef double ld;

int n,b[30],c;

ld g[30][30];

void gauss(int n)

} per(i,0,n)

}int main()

gauss(p);

rep(i,1,n+1) scanf("%d",&b[i]);

rep(i,1,n+2) c+=b[i]!=b[i-1];

printf("%d\n",c);

printf("%.10f\n",(double)g[c/2][p]);

}

hiho 1196 高斯消元 二

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述在上一回中,小hi和小ho趁著便利店打折,買了一大堆零食。當他們結賬後,看到便利店門口還有其他的活動。店主 買了東西還可以參加遊戲活動哦,如果能夠完成遊戲還有額外的獎品。小hi和小ho趕緊湊了過去。店主放了一塊遊戲板在店門...

高斯消元 浮點高斯消元

浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...

矩陣消元 高斯消元

安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...