poj2065 SETI
首先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相关推荐
- 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, ...
- SETi的Violeds技术解决方案可帮助阻止德尔塔变异病毒的传播
南卡罗来纳州哥伦比亚--(美国商业资讯)--全球领先的紫外发光二极管(UV LED)技术提供商.首尔半导体旗下子公司Sensor Electronic Technology, Inc. (SETi)和 ...
- SETI@home——在家搜寻外星人的计划
SETI的初衷? SETI@home是一个庞大科学计划:它旨在利用全球数百万台个人电脑,共同寻找外星文明.首先可以到其官方网站下载一个叫做SETI@home的软件.这是一个特别的屏幕保护程序,在用户不 ...
- POJ 2065 SETI [高斯消元同余]
题意自己看,反正是裸题... 普通高斯消元全换成模意义下行了 模模模! #include <iostream> #include <cstdio> #include <c ...
- POJ - 2065 SETI(高斯消元解方程(取模))
题目链接:点击查看 题目大意:给出一个质数作为 mod,再给出一个字符串,每个字母对应着一个数字: ' * ' = 0 ' a ' = 1 ' b ' = 2 ... ' z ' = 26 假设字符串 ...
- 【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^ ...
- hdu与poj题目分类
POJ 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(po ...
- 高斯消元(个人笔记)
[高斯消元] 1.高斯消元主要用于求解线性方程组,也可以用来求矩阵的秩,矩阵的逆等等: 2.时间复杂度O(n^3) 一.通过题目,找出线性方程组,列出增广矩阵 二.Guass函数 1.第一步,找出当前 ...
- 做acm 需要学的算法
做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...
最新文章
- 布局覆盖 超出一部分_Android 布局优化
- PhpStorm+PhpStudy开发环境的配置
- 6、Dcoker 容器数据卷用DockerFile添加
- matlab求被21整除,用matlab求[100,999]之间能被21整除的数的个数,还有建立一个字符串向量,删除大写字母._...
- 使用 Jackson 树连接线形状
- 张正友标定Opencv实现、标定流程以及图像坐标转为世界坐标
- ABP源码分析二十五:EventBus
- html第2天课堂笔记,第二天课堂笔记
- Git:git commit后撤销commit 提交
- 如何通过a/a中的href刷新当前界面
- 阶乘的传统流程图 c语言,C语言算法与流程图.ppt
- C语言练习题——if语句
- zmodem transfer cancled by remote side 解决办法
- 无线充电发热解决办法
- UFS/EMMC压力测试
- DPDK中的cuckoo hash算法
- 骨传导蓝牙耳机哪家好、骨传导蓝牙耳机品牌排行
- 如何在剪映windows版中将视频上传到指定的抖音账号中
- 前端JS常用工具方法 , 收藏
- XMind思维导图教程:如何做思维导图?
热门文章
- php目录间拷贝文件方法
- 19日零时起降低成品油价格 燃油税元旦起开征
- [转贴]年薪一万/十万/百万的各样生活
- android7.1默认背光亮度及编译调试
- Linux内核中的GPIO系统之(3):pin controller driver代码分析
- 给技术人上的管理课:平衡和集中
- linux文件系统简介
- 使用Silverlight for Embedded开发绚丽的界面(4)
- python制作英语字典_如何在Python中创建字典词典
- JDBC告警系列(一)The server time zone value 'ÖÐ' is unrecognized or represents more than one time zone....