一道高斯消元題目
題意:給你乙個數列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...