【高斯消元】【poj 2065】SETI
2014-12-06 11:21
337 查看
http://poj.org/problem?id=2065
更详细的模板见http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html
还是没有明白guass()怎么工作的,我怎么也想都应该是有一堆gcd套在里面的,反正照着模板打就A了。。。= =||
更详细的模板见http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html
还是没有明白guass()怎么工作的,我怎么也想都应该是有一堆gcd套在里面的,反正照着模板打就A了。。。= =||
//#define _TEST _TEST #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <cmath> #include <algorithm> using namespace std; /************************************************ Code By willinglive Blog:http://willinglive.cf ************************************************/ #define rep(i,l,r) for(int i=l,___t=(r);i<=___t;i++) #define per(i,r,l) for(int i=r,___t=(l);i>=___t;i--) #define MS(arr,x) memset(arr,x,sizeof(arr)) #define LL long long #define INE(i,u,e) for(int i=head[u];~i;i=e[i].next) inline const int read() {int r=0,k=1;char c=getchar();for(;c<'0'||c>'9';c=getchar())if(c=='-')k=-1; for(;c>='0'&&c<='9';c=getchar())r=r*10+c-'0';return k*r;} ///////////////////////////////////////////////// int n,p; char s[100]; int a[100][100],x[100]; ///////////////////////////////////////////////// inline void mod(int &x){x=(x%p+p)%p;} int pow_mod(int a,int b,int p){int t=1;for(;b;b>>=1,a=a*a%p)if(b&1)t=t*a%p;return t;} int inv(int n){return pow_mod(n,p-2,p);} void guass() { rep(i,0,n-1) { int k=i; for(;k<n;k++) if(a[k][i]) break; if(k!=i) rep(j,i,n) swap(a[i][j],a[k][j]); rep(j,i+1,n-1) if(a[j][i]) { int tmp=a[j][i]*inv(a[i][i])%p; rep(k,i,n) a[j][k]-=tmp*a[i][k],mod(a[j][k]); } } per(i,n-1,0) { int tmp=0; rep(j,i+1,n-1) tmp+=x[j]*a[i][j],mod(tmp); tmp=a[i] -tmp,mod(tmp); x[i]=tmp*inv(a[i][i])%p; } } ///////////////////////////////////////////////// void input() { MS(a,0); MS(x,0); scanf("%d %s\n",&p,s); n=strlen(s); } void solve() { rep(i,0,n-1) { if(s[i]=='*') a[i] =0; else a[i] =s[i]-'a'+1; } rep(i,0,n-1) { int k=1; rep(j,0,n-1) { a[i][j]=k; k=k*(i+1)%p; } } guass(); printf("%d",x[0]); rep(i,1,n-1) printf(" %d",x[i]); puts(""); } ///////////////////////////////////////////////// int main() { #ifndef _TEST freopen("std.in","r",stdin); freopen("std.out","w",stdout); #endif for(int T=read();T--;) input(),solve(); return 0; }
相关文章推荐
- POJ 2065 SETI 高斯消元解线性同余方程
- poj 2065 SETI(高斯消元求模线性方程组)
- poj_2065 SETI(高斯消元解同余方程组)
- SETI - POJ 2065 高斯消元
- poj 2065 SETI(高斯消元)
- poj 2065 SETI(高斯消元)
- poj 2065 SETI(数学:高斯消元)
- poj 2065 SETI 高斯消元
- POJ-2065 SETI 高斯消元
- Poj 2065 SETI (高斯消元)
- POJ 2065 SETI(高斯消元)
- poj 2065 SETI (高斯消元)
- POJ 2065-SETI(高斯消元求解同余方程式)
- POJ 2065 SETI(高斯消元)
- POJ 2065 SETI [高斯消元同余]
- POJ 2065 SETI(高斯消元)
- [高斯消元+拓展欧几里得] poj 2065 SETI
- POJ 2065 SETI(高斯消元)
- POJ 2065 SETI 高斯消元
- poj 2065 SETI(高斯消元)