SETI

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

eg:str[] = "abc", 那么说明 n=3, 字符串所对应的数列为1, 2, 3。

题目定义了一个函数:a0*1^0 + a1*1^1+a2*1^2+........+an-1*1^(n-1) = f(1)(mod p), f(1) = str[0] = a = 1;
                                 a0*2^0 + a1*2^1+a2*2^2+........+an-1*2^(n-1) = f(2)(mod p), f(2) = str[1] = b = 2;
                                    ..........
                                   a0*n^0 + a1*n^1+a2*n^2+........+an-1*n^(n-1) = f(n)(mod p),f(n) = str[n-1] = ````

求出 a0,a1,a2....an-1。

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
typedef long long ll;
const int maxn=400;
int a[maxn][maxn];//增广矩阵
int x[maxn];//解集
int equ,var,mod;//equ个方程var个未知数
int gcd(int a,int b)
{if(b==0)return a;return gcd(b,a%b);
}
int lcm(int a,int b)
{return a/gcd(a,b)*b;
}
int powmod(int a,int b,int c)
{a=a%c;int res=1;while(b){if(b&1)res=(res*a)%c;a=a*a%c;b>>=1;}return res;
}
/*int exgcd(int a,int b,int &x,int &y)//扩展欧几里得求逆元
{if(b==0){x=1;y=0;return a;}int ans=exgcd(b,a%b,x,y);int t=x;x=y;y=t-(a/b)*y;return ans;
}*/
int gauss()
{int max_r,col,k,i,j;for(k=0,col=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(a[max_r][col]==0){k--;continue;}if(max_r!=k){for(j=col;j<=var;j++)swap(a[k][j],a[max_r][j]);}for(i=k+1;i<equ;i++){if(a[i][col]!=0){int Lcm=lcm(abs(a[i][col]),abs(a[k][col]));int ta=Lcm/abs(a[i][col]);int tb=Lcm/abs(a[k][col]);if(a[i][col]*a[k][col]<0)tb=-tb;for(j=col;j<=var;j++){a[i][j]=((a[i][j]*ta-a[k][j]*tb)%mod+mod)%mod;}}}}for(i=k;i<equ;i++)if(a[i][col]!=0)return -1;//无解if(k<var)return var-k;//多解for(i=var-1;i>=0;i--){int temp=a[i][var];for(j=i+1;j<var;j++){if(a[i][j]){temp-=a[i][j]*x[j];temp=(temp%mod+mod)%mod;}}x[i]=temp*powmod(a[i][i],mod-2,mod)%mod;//逆元/*int xx,y;exgcd(a[i][i],mod,xx,y);x[i]=(temp*xx%mod+mod)%mod;*///扩展欧几里得求逆元}return 0;
}
int main()
{int t,i,j;char ch[maxn];scanf("%d",&t);while(t--){scanf("%d%s",&mod,ch);int len=strlen(ch);for(i=0;i<len;i++){if(ch[i]=='*')a[i][len]=0;elsea[i][len]=ch[i]-'a'+1;}equ=var=len;for(i=0;i<len;i++){for(j=0;j<len;j++){a[i][j]=powmod(i+1,j,mod);}}gauss();for(i=0;i<len-1;i++)printf("%d ",x[i]);printf("%d\n",x[i]);}
}

高斯消元解同余方程组相关推荐

  1. poj2947(高斯消元解同模方程组)

    题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start end a1, a2......ap (1< ...

  2. jzoj3823 遇见 [高斯消元解异或方程组]

    Description Zyh独自一人在街上漫步.Zyh相信不久后应该就可以和她一起漫步,可是去哪里寻找那个她呢?Zyh相信每个人都有一个爱情的号码牌,这个号码牌是一个n*n的矩阵. 每个人都要在矩阵 ...

  3. 【BZOJ1923】外星千足虫,高斯消元解xor方程组

    Time:2016.08.29 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 原本以为是高斯消元解取模方程,后来发现这题意不就和异或方程一样吗 [异或(XOR)运算由于与" ...

  4. 第三十四章 数论——高斯消元解线性方程组

    第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...

  5. HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)

    题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...

  6. [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题

    [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...

  7. 高斯消元 AcWing 883. 高斯消元解线性方程组

    高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...

  8. POJ 2947 Widget Factory (高斯消元解同余方程组)

    题意:N种物品,M条记录,接写来M行,每行有K,str1,str2,表示第i个记录从星期str1到星期str2,做了K件物品,接下来的K个数为物品的编号.求做每个物品所需的时间,并且最后结果在3-9之 ...

  9. AcWing 883. 高斯消元解线性方程组(高斯消元模板)

    先出裸的模板: #include<bits/stdc++.h>using namespace std; const int N = 110; typedef double db; db a ...

最新文章

  1. iOS SwiftUI篇-1 项目结构
  2. 举个栗子看如何做MySQL 内核深度优化
  3. c 传入易语言字节,易语言字节集参数传递详解
  4. SQL datediff (时间差)
  5. python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配
  6. KillTimer析构函数
  7. input限制输入小数点后两位(vue版本)
  8. STL源码剖析 set相关算法
  9. python自动备份数据库_Python Mysql自动备份脚本
  10. kafka消费者分区的分配的三种机制
  11. DEIGRP 的配置
  12. python导入类属性不存在_为什么我会得到一个错误:我的类中不存在该属性?
  13. Intel 加速分布式计算系统的三个神器
  14. 抽象类与接口的区别(
  15. MNIST数据集下载
  16. Latex tabular和tabular* 注意表格样式参数命令
  17. scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取
  18. fifo算法原理及fifo置换算法
  19. 1200000有多少个约数
  20. 谷歌Zxing Utils

热门文章

  1. python 删除set指定值_python中的变量和数据类型(三)
  2. 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
  3. python自学要多久-python从入门到精通需要多久?你需要先明白这两个点
  4. python有什么用-python都可以做什么用
  5. python工资一般多少p-Python是什么?简单了解pythonp-入门
  6. python代码翻译器-python写的翻译代码
  7. python读音播报-基于python GUI开发的点名小程序(语音播报)
  8. 51—Nod 1384 全排列
  9. V-最大公约数 递归
  10. js 异步执行_js执行机制:同步与异步(宏任务与微任务)