首先a…z=1..26,*=0 
读入p(模数且为质数),s(下标从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];//标记是否是不确定的变元
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;//做的第一道题关于高斯消元的板子,博主能想到这种构造出k^i的数值也是很服气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;// 当前这列绝对值最大的行.int col;//当前处理的列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--)//对应的就是从单位矩阵中为1的位置去解,跟着这个循环走两边就知道是怎么接出来唯一解的了{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;
}

poj2065 SETI相关推荐

  1. POJ-2065 SETI 高斯消元,扩展GCD

    该题题义是给定如下一个方程组: F(1) = C1 (mod) P F(2) = C2 (mod) P F(3) = C3 (mod) P ... 其中F(1) = A(1,1)*x1 + A(1, ...

  2. SETi的Violeds技术解决方案可帮助阻止德尔塔变异病毒的传播

    南卡罗来纳州哥伦比亚--(美国商业资讯)--全球领先的紫外发光二极管(UV LED)技术提供商.首尔半导体旗下子公司Sensor Electronic Technology, Inc. (SETi)和 ...

  3. SETI@home——在家搜寻外星人的计划

    SETI的初衷? SETI@home是一个庞大科学计划:它旨在利用全球数百万台个人电脑,共同寻找外星文明.首先可以到其官方网站下载一个叫做SETI@home的软件.这是一个特别的屏幕保护程序,在用户不 ...

  4. POJ 2065 SETI [高斯消元同余]

    题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...

  5. POJ - 2065 SETI(高斯消元解方程(取模))

    题目链接:点击查看 题目大意:给出一个质数作为 mod,再给出一个字符串,每个字母对应着一个数字: ' * ' = 0 ' a ' = 1 ' b ' = 2 ... ' z ' = 26 假设字符串 ...

  6. 【POJ】2065 SETI

    题意:直接拿样例,37 abc. a-z表示1-26,*表示0. x0*1^0+x1*1^1+x2*1^2=1(mod 37) x0*2^0+x1*2^1+x2*2^2=2(mod 37) x0*3^ ...

  7. hdu与poj题目分类

    POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...

  8. 高斯消元(个人笔记)

    [高斯消元] 1.高斯消元主要用于求解线性方程组,也可以用来求矩阵的秩,矩阵的逆等等: 2.时间复杂度O(n^3) 一.通过题目,找出线性方程组,列出增广矩阵 二.Guass函数 1.第一步,找出当前 ...

  9. 做acm 需要学的算法

    做acm 需要学的算法 转一个搞ACM需要的掌握的算法.  要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.  适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...

最新文章

  1. 布局覆盖 超出一部分_Android 布局优化
  2. PhpStorm+PhpStudy开发环境的配置
  3. 6、Dcoker 容器数据卷用DockerFile添加
  4. matlab求被21整除,用matlab求[100,999]之间能被21整除的数的个数,还有建立一个字符串向量,删除大写字母._...
  5. 使用 Jackson 树连接线形状
  6. 张正友标定Opencv实现、标定流程以及图像坐标转为世界坐标
  7. ABP源码分析二十五:EventBus
  8. html第2天课堂笔记,第二天课堂笔记
  9. Git:git commit后撤销commit 提交
  10. 如何通过a/a中的href刷新当前界面
  11. 阶乘的传统流程图 c语言,C语言算法与流程图.ppt
  12. C语言练习题——if语句
  13. zmodem transfer cancled by remote side 解决办法
  14. 无线充电发热解决办法
  15. UFS/EMMC压力测试
  16. DPDK中的cuckoo hash算法
  17. 骨传导蓝牙耳机哪家好、骨传导蓝牙耳机品牌排行
  18. 如何在剪映windows版中将视频上传到指定的抖音账号中
  19. 前端JS常用工具方法 , 收藏
  20. XMind思维导图教程:如何做思维导图?

热门文章

  1. php目录间拷贝文件方法
  2. 19日零时起降低成品油价格 燃油税元旦起开征
  3. [转贴]年薪一万/十万/百万的各样生活
  4. android7.1默认背光亮度及编译调试
  5. Linux内核中的GPIO系统之(3):pin controller driver代码分析
  6. 给技术人上的管理课:平衡和集中
  7. linux文件系统简介
  8. 使用Silverlight for Embedded开发绚丽的界面(4)
  9. python制作英语字典_如何在Python中创建字典词典
  10. JDBC告警系列(一)The server time zone value 'ÖÐ' is unrecognized or represents more than one time zone....