poj2065 SETI
生活随笔
收集整理的這篇文章主要介紹了
poj2065 SETI
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先a…z=1..26,*=0?
讀入p(模數(shù)且為質(zhì)數(shù)),s(下標(biāo)從0開始),s長度為n?
求方程組?
https://blog.csdn.net/Clove_unique/article/details/54381675
?
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; typedef long long ll; const int maxn=100; int mod,a[maxn][maxn],x[maxn]; bool free_x[maxn];//標(biāo)記是否是不確定的變元 int var,equ; char str[maxn]; int p; void ex_gcd(int a, int b, int &d, int &x, int &y) { if (!b) { x = 1; y = 0; d = a; } else { ex_gcd(b, a%b, d, y, x); y -= x * (a / b); }; } int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } int lcm(int a,int b){return a/gcd(a,b)*b;}//先除后乘防溢出 int inv_exgcd(int a, int m) { int d, x, y;ex_gcd(a, m, d, x, y);return d == 1 ? (x + m) % m : -1; } void init() {memset(a, 0, sizeof(a));var=equ=strlen(str);for(int i=0;i<equ;++i){int te=1;for(int j=0;j<var;++j){a[i][j]=te;//做的第一道題關(guān)于高斯消元的板子,博主能想到這種構(gòu)造出k^i的數(shù)值也是很服氣te=te*(i+1)%p;}a[i][var]=(str[i]=='*')?0:int(str[i]-'a'+1);//常量 題目中說的f(k)} } int Gauss() {int i,j,k;int max_r;// 當(dāng)前這列絕對值最大的行.int col;//當(dāng)前處理的列int ta,tb;int LCM;int temp;for(col=0,k = 0;k < equ && col < var;++k,++col){max_r=k;for(i=k+1;i<equ;i++){if(abs(a[i][col])>abs(a[max_r][col])) max_r=i;}if(max_r!=k){for(j=k;j<var+1;j++) swap(a[k][j],a[max_r][j]);}if(a[k][col]==0){k--;continue;}for(i=k+1;i<equ;i++){// 枚舉要刪去的行.if(a[i][col]!=0){LCM = lcm(abs(a[i][col]),abs(a[k][col]));ta = LCM/abs(a[i][col]);tb = LCM/abs(a[k][col]);if(a[i][col]*a[k][col]<0)tb=-tb;//異號的情況是相加for(j=col;j<var+1;j++){a[i][j] =((a[i][j]*ta-a[k][j]*tb)%p+p)%p;;}}}}for (i = k; i < equ; i++){if (a[i][col] != 0) return -1;}for (i = var - 1; i >= 0; i--)//對應(yīng)的就是從單位矩陣中為1的位置去解,跟著這個循環(huán)走兩邊就知道是怎么接出來唯一解的了{temp = a[i][var];for (j = i + 1; j < var; j++){if (a[i][j] != 0) temp =((temp- a[i][j] * x[j])%p+p)%p;//}int g=inv_exgcd(a[i][i],p);x[i]=temp*g%p;}return 0; } int main() {int i, j;int t;cin>>t;while(t--){scanf("%d %s",&p,str);init();Gauss();cout<<x[0];for (i = 1; i < var; i++)printf(" %d",x[i]);printf("\n");}return 0; }?
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的poj2065 SETI的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 2947 Widget Fact
- 下一篇: poj1222开关问题