大意: 给定$4n$个$m$位的五进制数, $q$个询问, 每个询问给出一个$m$位的五进制数$b$, 求有多少种选数方案可以使五进制异或和为$b$.

高斯消元入门题

每次询问相当于就是给定了$m$个式子组成的模$5$的方程组, 求解的个数

如果消元后询问某一位非零, 但是对应系数矩阵全零, 那么无解

否则解的个数是$5^{n-r}$

$q$组询问的话, 就增广$q$列, 同时解$q$个方程组即可.

  1. #include <iostream>
  2. #include <sstream>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <set>
  7. #include <map>
  8. #include <queue>
  9. #include <string>
  10. #include <cstring>
  11. #include <bitset>
  12. #include <functional>
  13. #include <random>
  14. #define REP(i,a,n) for(int i=a;i<=n;++i)
  15. #define PER(i,a,n) for(int i=n;i>=a;--i)
  16. #define hr putchar(10)
  17. #define pb push_back
  18. #define lc (o<<1)
  19. #define rc (lc|1)
  20. #define mid ((l+r)>>1)
  21. #define ls lc,l,mid
  22. #define rs rc,mid+1,r
  23. #define x first
  24. #define y second
  25. #define io std::ios::sync_with_stdio(false)
  26. #define endl '\n'
  27. #define DB(a) ({REP(__i,1,n) cout<<a[__i]<<',';hr;})
  28. using namespace std;
  29. typedef long long ll;
  30. typedef pair<int,int> pii;
  31. const int P = 1e9+7, INF = 0x3f3f3f3f;
  32. ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
  33. ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
  34. ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
  35. inline int rd() {int x=0;char p=getchar();while(p<'0'||p>'9')p=getchar();while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();return x;}
  36. //head
  37.  
  38. const int N = 510;
  39. int n, m, q, A[N][2*N], in[N];
  40. char s[N];
  41.  
  42. int main() {
  43. REP(i,0,4) in[i]=i*i*i%5;
  44. scanf("%d%d", &n, &m);
  45. REP(i,1,n) {
  46. scanf("%s",s+1);
  47. REP(j,1,m) A[j][i]=s[j]-'a';
  48. }
  49. scanf("%d", &q);
  50. REP(i,1,q) {
  51. scanf("%s",s+1);
  52. REP(j,1,m) A[j][i+n]=s[j]-'a';
  53. }
  54. int r = 0;
  55. REP(i,1,n) {
  56. int p = r;
  57. while (!A[p][i]&&p<=m) ++p;
  58. if (p>m) continue;
  59. if (p!=r) REP(j,1,n+q) swap(A[p][j],A[r][j]);
  60. REP(j,1,m) if (j!=r&&A[j][i]) {
  61. int t = A[j][i]*in[A[r][i]]%5;
  62. REP(k,i,n+q) A[j][k]=(A[j][k]-t*A[r][k]+25)%5;
  63. }
  64. ++r;
  65. }
  66. REP(i,1,q) {
  67. int ans = qpow(5,n-r);
  68. REP(j,1,m) if (A[j][i+n]) {
  69. int ok = 0;
  70. REP(k,1,n) if (A[j][k]) ok = 1;
  71. if (!ok) ans = 0;
  72. }
  73. printf("%d\n",ans);
  74. }
  75. }

Vasya and Shifts CodeForces - 832E (高斯消元)的更多相关文章

  1. Codeforces 1163E 高斯消元 + dfs

    题意:给你一个集合,让你构造一个长度尽量长的排列,使得排列中任意相邻两个位置的数XOR后是集合中的数. 思路:我们考虑枚举i, 然后判断集合中所有小于1 << i的数是否可以构成一组异或空 ...

  2. Codeforces 832E Vasya and Shifts - 高斯消元

    题目传送门 快速的传送门I 快速的传送门II 题目大意 (题意比较复杂,请自行阅读原题) 可以将原题的字母都看成它们的在字符表中的下标,这样问题就变成给定$n$个$m$维向量$\vec{a_{1}}, ...

  3. Codeforces Gym10008E Harmonious Matrices(高斯消元)

    [题目链接] http://codeforces.com/gym/100008/ [题目大意] 给出 一个n*m的矩阵,要求用0和1填满,使得每个位置和周围四格相加为偶数,要求1的数目尽量多. [题解 ...

  4. Codeforces Round #114 (Div. 1) E. Wizards and Bets 高斯消元

    E. Wizards and Bets 题目连接: http://www.codeforces.com/contest/167/problem/E Description In some countr ...

  5. CodeForces 24D Broken robot(期望+高斯消元)

    CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...

  6. Educational Codeforces Round 63 (Rated for Div. 2) E 带模高斯消元

    https://codeforces.com/contest/1155/problem/E 题意 \(f(x)=a_0+a_1x+a_2x^2+...+a_kx^k,k \leq 10,0 \leq ...

  7. Codeforces 446D - DZY Loves Games(高斯消元+期望 DP+矩阵快速幂)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙题,%%% 首先考虑所有格子都是陷阱格的情况,那显然就是一个矩阵快速幂,具体来说,设 \(f_{i,j}\) 表示走了 \(i\) 步 ...

  8. Codeforces.24D.Broken robot(期望DP 高斯消元)

    题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n- ...

  9. Codeforces.472F.Design Tutorial: Change the Goal(构造 线性基 高斯消元)

    题目链接 \(Description\) 给定两个长为\(n\)的数组\(x_i,y_i\).每次你可以选定\(i,j\),令\(x_i=x_i\ \mathbb{xor}\ x_j\)(\(i,j\ ...

随机推荐

  1. javascript巧用注释保存html文本结构

    在js中,肯定会遇到js代码里面有html接口的时候,骚年们都有哪些写法? 刚学JS的写法: <script> var strHtml="<div id=\"te ...

  2. 一个禁用mac内置键盘的方法

    一个禁用mac内置键盘的方法 强大的 karabiner, 非常好用. 可以直接在有外接键盘连接的情况下, 禁用掉内置键盘 另外一个方法是启用mac的 鼠标键, 感觉用处不是很大, 修饰健并没有被禁用 ...

  3. (4.1)打造简单OS-小实验[图形显示]

    主要是实现<简单打造OS>第四小节说到的一个图形界面的实验项目 1.mbr boot.inc ;------------- loader和kernel ---------- LOADER_ ...

  4. mysql adddate()函数

    mysql> ); +---------------------------+ | adddate() | +---------------------------+ | -- | +----- ...

  5. CNN中各类卷积总结:残差、shuffle、空洞卷积、变形卷积核、可分离卷积等

    CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量.我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中 ...

  6. springboot注解方式使用redis缓存

    引入依赖库 在pom中引入依赖库,如下 <dependency> <groupId>org.springframework.boot</groupId> <a ...

  7. Node.js之删除文件夹(含递归删除)

    应用场景:比如像Eclipse这样的IDE,右击项目,出现选项,点击选项中的删除,就可以删除这个项目及其下的子目录包含文件(使用electron开发的桌面端项目多少都会用到). 核心代码如下: /** ...

  8. [转]JRebel 热部署激活教程

    原文地址:https://cloud.tencent.com/developer/news/303750 JRebel的官方地址(https://zeroturnaround.com/software ...

  9. dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法

    dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法 在混淆的时候报错了,错误描述大致如下: Could not find a compatible vers ...

  10. 转 : 请问mysql如何确定一个库是主库还是从库。

    select user,host from mysql.user;SELECT Repl_slave_priv,Repl_client_priv,super_priv,host FROM mysql. ...