POJ 2065 SETI 高斯消元

原创 2012年03月31日 16:24:23

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove

依旧高斯消元,重要的是列方程

a0*1^0 + a1*1^1+a2*1^2+........+an-1*1^(n-1) = f(1)
a0*2^0 + a1*2^1+a2*2^2+........+an-1*2^(n-1) = f(2)
..............
a0*n^0 + a1*n^1+a2*n^2+........+an-1*n^(n-1) = f(n)

/*
ID:cxlove
PROB:poj 2065
DATA:2012.3.31
HINT:高斯消元
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int p,n,a[100][100];
char str[100];
void debug(){
	for(int i=0;i<n;i++){
		for(int j=0;j<=n;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}
void gauss(){
	int ans[100];
	int i,j;
	for(i=0,j=0;i<n&&j<n;j++){
		int k=i;
		for(;k<n;k++)
			if(a[k][j])
				break;
		if(a[k][j]){
			for(int r=0;r<=n;r++)
				swap(a[i][r],a[k][r]);
			for(int k=0;k<n;k++){
				if(k!=i&&a[k][j]){
					int b1=a[k][j],b2=a[i][j];
					for(int r=0;r<=n;r++)
						a[k][r]=((a[k][r]*b2-a[i][r]*b1)%p+p)%p;
				}
			}
		    i++;
		}
	}
//	debug();
	for(int i=n-1;i>=0;i--){
		int temp=a[i][n];
		for(int j=i+1;j<n;j++)
			temp=((temp-a[i][j]*ans[j])%p+p)%p;
		while(temp%a[i][i]!=0) temp+=p;
		ans[i]=(temp/a[i][i])%p;
	}
	for(int i=0;i<n-1;i++)
		printf("%d ",ans[i]);
	printf("%d\n",ans[n-1]);
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		scanf("%d%s",&p,str);
		n=strlen(str);
		for(int i=0;i<n;i++){
			if(str[i]=='*')
				a[i][n]=0;
			else
				a[i][n]=str[i]-'a'+1;
			a[i][0]=1;
			for(int j=1;j<n;j++)
				a[i][j]=(a[i][j-1]*(i+1))%p;
		}
	//	debug();
		gauss();
	}
	return 0;
}



POJ 2065-SETI(高斯消元求解同余方程式)

题目地址:POJ 2065 题意:输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b’对应2....            eg:s...

POJ 2065 SETI(高斯消元解同余方程组)

传送门SETITime Limit: 1000MSMemory Limit: 30000KTotal Submissions: 1882Accepted: 1165DescriptionFor som...

poj 2065 SETI(高斯消元求模线性方程组)

题意: 给出一个方程f (k) = ∑0aiki (mod p) always evaluates to values 0 每个字母代表一个f[k], a代表1,b代表2,以此类推,*代表0.让你求...

【高斯消元】【poj 2065】SETI

http://poj.org/problem?id=2065 还是没有明白guass()怎么工作的,反正照着模板打就A了。。。 //#define _TEST _TEST #include ...

poj 2065 SETI(高斯消元)

SETI Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1629   Accepted:...
  • modiz
  • modiz
  • 2015年04月07日 15:22
  • 340

POJ 2065 SETI(高斯消元解模方程组)

题目: SETI Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1693   Ac...

poj 2065 SETI(高斯消元)

SETI Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1469   Accepted:...

poj 2065 SETI (高斯消元)

SETI Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 2038   Accepted:...

poj 2065 SETI(高斯消元)

http://poj.org/problem?id=2065 题意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b...

uva 1563 - SETI(高斯消元+逆元)

题目链接:uva 1563 - SETI 题目大意:给定p和一个字符串,求一个序列,对应的f(k)根据公式求出的值为字符串上第k个字符(‘*’对应值为0,从a到z对应1到26) 解题思路:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2065 SETI 高斯消元
举报原因:
原因补充:

(最多只允许输入30个字)