https://vjudge.net/problem/UVA-1563

高斯消元解同余方程组 就是把原来的除法换成逆元,其他的都一样

#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n, p;
int a[N][N];
char s[N];
int power(int x, int t)
{
int ret = ;
for(; t; t >>= , x = x * x % p) if(t & ) ret = ret * x % p;
// printf("ret=%d\n", ret);
return ret;
}
void build()
{
for(int i = ; i < n; ++i)
{
if(s[i + ] == '*') a[i][n] = ;
else a[i][n] = s[i + ] - 'a' + ;
}
for(int k = ; k < n; ++k)
for(int i = ; i < n; ++i)
a[k][i] = power(k + , i);
}
void gauss_jordan()
{
for(int now = ; now < n; ++now)
{
int x = now;
for(int i = now; i < n; ++i) if(abs(a[i][now]) > abs(a[x][now])) x = i;
for(int i = ; i <= n; ++i) swap(a[now][i], a[x][i]);
int inv = power(a[now][now], p - );
for(int i = now; i <= n; ++i) a[now][i] = a[now][i] * inv % p; // /a[now][now]
for(int i = ; i < n; ++i) if(i != now && a[i][now])
{
int t = a[i][now]; // a[i][j] = a[i][j] - t * a[now][j]
for(int j = ; j <= n; ++j) a[i][j] = ((a[i][j] % p - t * a[now][j] % p) % p + p)% p;
}
}
}
int main()
{
int T; scanf("%d", &T);
while(T--)
{
memset(a, , sizeof(a));
scanf("%d%s", &p, s + ); n = strlen(s + );
build();
gauss_jordan();
for(int i = ; i < n - ; ++i) printf("%d ", a[i][n]);
printf("%d\n", a[n - ][n]);
}
return ;
}

uva1563的更多相关文章

随机推荐

  1. 利用类装饰器自定制property实现延迟计算

    class LazyProperty: ''' hello,我是非数据描述符(没有定义__set__,不然是大哥数据描述符了--!) ''' def __init__(self, func): pri ...

  2. Leetcode 150.逆波兰表达式求值

    逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总 ...

  3. 命令行下设置 PYTHONPATH 来正确运行Python代码

    写Python程序,总要使用一些自己使用的库:在运行此类程序的时候,就需要先配置好 PYTHONPATH 环境变量:否则会导致找不到库错误. Windows下,可以写一个bat来简化配置: @ECHO ...

  4. hdu 4770 状压+枚举

    /* 长记性了,以后对大数组初始化要注意了!140ms 原来是对vis数组进行每次初始化,每次初始化要200*200的复杂度 一直超时,发现没必要这样,直接标记点就行了,只需要一个15的数组用来标记, ...

  5. 网络编程进阶:并发编程之协程、IO模型

    协程: 基于单线程实现并发,即只用一个主线程(此时可利用的CPU只有一个)情况下实现并发: 并发的本质:切换+保存状态 CPU正在运行一个任务,会在两种情况下切走去执行其他任务(切换有操作系统强制控制 ...

  6. vagrant的学习 之 基础学习

    vagrant的学习 之 基础学习 本文根据慕课网的视频教程练习,感谢慕课网! 慕课的参考文档地址:https://github.com/apanly/mooc/tree/master/vagrant ...

  7. codeforces 691F(组合数计算)

    Couple Cover, a wildly popular luck-based game, is about to begin! Two players must work together to ...

  8. springboot-jjwt HS256加解密(PS:验证就是解密)

    最近项目需要用到类似access token进行加解密.验签的需求,本人在此做个小笔记记录一下,以供他人参考. 一共会用到2中加解密,HS256 和 RS256,本文只是对 HS256做个备注,好了直 ...

  9. Redux 中文文档

    http://cn.redux.js.org/docs/introduction/Ecosystem.html

  10. JAVA 小程序之ATM

    一个JAVA的小程序,主要要求有模块化编程的思想,能够把ATM中各个功能独立成为一个一个的方法. ATM主要功能有: 查询余额: 取款: 存款: 修改密码: 退出. 以上功能均由独立的方法给出,具体实 ...