整数矩阵CMO 2102回馈(gauss整数解)
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
本题是CMO(数学 Olympics) 2012 第二题
所以还是很坑的……(出题人是shuxuedi)
反正这题总算是写了一个远远长于正解的打表(Gauss消元-判断有无整数解/无解,已肯定谜底是不是可行)
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (10)
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
long long gcd(long long a,long long b){if (!b) return a;return gcd(b,a%b);}
long long lcm(long long a,long long b){return a/gcd(a,b)*b;}
int n,a[10][10],b[100]={0};
int f[100+10][100+10]={0},un_fre[2*MAXN]={0};
int f2[100+10][100+10]={0};
void print()
{
For(i,2*n)
{
For(j,2*n+1) cout<<f2[i][j]<<' ';
cout<<endl;
}
cout<<endl;
}
int gauss(int N)
{
memcpy(f2,f,sizeof(f));
//print();
memset(un_fre,0,sizeof(un_fre));
int k=1;
For(i,2*n)
{
int t=0;
Fork(j,k,N) if (f2[j][i]) t=j;
if (!t) continue;//cout<<t<<' '<<i<<' '<<f[t][i]<<' '<<k<<endl;
//print();
swap(f2[k],f2[t]);
//print();
Fork(j,1,N)
{
if (j^k&&f2[j][i])
{
int _l=lcm(abs(f2[j][i]),abs(f2[k][i]));
int ta=_l/f2[k][i],tb=_l/f2[j][i];
Fork(l,1,2*n+1) f2[j][l]=f2[k][l]*ta-f2[j][l]*tb;
}
}
un_fre[k]=i;
k++;
}k--;
/*
For(i,k)
{
if (f[i][2*n+1]%f[i][un_fre[i]]) return 2;
else f[i][2*n+1]/=f[i][un_fre[i]];
//if (f[i][2*n+1]<0) return -1;
}*/
//cout<<k<<endl; Fork(i,k+1,N)
{
if (f2[i][2*n+1]) return 0;
}
//print();
/*
For(i,k)
{
cout<<un_fre[i]<<':'<<f2[i][2*n+1]<<' ';
}cout<<endl;*/
//print();
//system("pause");
return 1; }
int tot=0;
void dfs(int i,int j)
{
if (j>n) i++,j=1;
if (i==n+1)
{
tot++;
For(i,n)
{
For(j,n) cout<<a[i][j]<<' ';
cout<<endl;
}
cout<<endl;
}
For(p,n*n) if (!b[p])
{
b[p]=1;
a[i][j]=p;
//memset(f[(i-1)*n+j],0,sizeof(f[(i-1)*n+j]));
f[(i-1)*n+j][i]=f[(i-1)*n+j][n+j]=1;f[(i-1)*n+j][2*n+1]=p;
if ((i-1)*n+j==n*n) if (gauss((i-1)*n+j)^1) {b[p]=0;continue;}
dfs(i,j+1);
b[p]=0;
}
}
int main()
{
// freopen("repay.in","r",stdin);
// freopen(".out","w",stdout);
cin>>n;
dfs(1,1);
cout<<tot<<endl;
return 0;
}
俄国作家契诃夫说:“有大狗,有小狗,小狗不该因为大狗的存在而心慌意乱。所有的狗都应该叫,就让他各自用上帝给他的声音。
好吧……到4已经打不出表了……
观察后发明:
每一个矩阵满意如下性质
每行or 每列 数字集合一定是kp+1,kp+2...kp+p 型
1 2 3 4 7 1
4 5 6 or 5 8 2
7 8 9 6 3 9
行和列可以互换(必须整行整列)
于是谜底就是2(行/列)*(p!)第一行排列顺序(p!)行的排列顺序
这题尽管n很大,但是过了10007以后就都是0了
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (10007)
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
long long n;
int main()
{
freopen("repay.in","r",stdin);
freopen("repay.out","w",stdout);
cin>>n;
long long ans=2;
For(i,n)
{
if (ans==0) break;
ans=mul(ans,i);ans=mul(ans,i);
}
cout<<ans<<endl; return 0;
}
文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
应聘者:JAVA
面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累
面试官:知道什么是包?
应聘者:我这人实在 平常不带包 也不用公司准备了
面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒
面试官:知道什么是继承么
应聘者:我是孤儿没什么可以继承的
面试官:知道什么叫对象么?
应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
面试官:知道多态么?
应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??
---------------------------------
原创文章 By
整数和矩阵
---------------------------------
整数矩阵CMO 2102回馈(gauss整数解)的更多相关文章
- hdu 2256 Problem of Precision 构造整数 + 矩阵快速幂
http://acm.hdu.edu.cn/showproblem.php?pid=2256 题意:给定 n 求解 ? 思路: , 令 , 那么 , 得: 得转移矩阵: 但是上面求出来的并 ...
- 29.求3x3的整数矩阵对角线元素之和
#include <stdio.h> #include <stdlib.h> int main() { ,a[][]; ;i<;i++) { ;j<;j++) sc ...
- Gauss 消元(模板)
/* title:Gauss消元整数解/小数解整数矩阵模板 author:lhk time: 2016.9.11 没学vim的菜鸡自己手打了 */ #include<cstdio> #in ...
- cdoj 1250 喵哈哈的矩阵 数学题
喵哈哈的矩阵 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1250 Desc ...
- hdu 5755(Gauss 消元) &poj 2947
Gambler Bo Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tota ...
- 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)
必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵\(A(u,v)\),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩 ...
- 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)
必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵A(u,v),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩阵定义为 ...
- PAT 08-2 求矩阵的局部最大值
这题挺简单的,但,每日一篇.说两点:第一,我的粗心导致我这题花了大把的时间去找错误,看到4个测试用例对了三个,我以为是那块的边界条件没考虑到,又或者是存在隐蔽的逻辑或语法错误,通过与别人程序的反复对比 ...
- Openjudge计算概论-计算矩阵边缘元素之和
/*======================================================================== 计算矩阵边缘元素之和 总时间限制: 1000ms ...
随机推荐
- noip2000提高组题解
事实再次向我证明了RP的重要性... 第一题:进制转换 是我最没有把握AC的一道题目却是我唯一一道AC的题目,真是讽刺.看完题目几乎完全没有往正常的解法(取余倒序)去想,直接写了搜索,因为数据范围在2 ...
- MySQL操作备忘录
在mysql包中,mysqld是数据库服务器,mysql是客户端,mysqladmin则用于管理数据库服务器的信息,如用户密码等. 关于安装: 1.在d:/sftwr/mysql/bin目录下: my ...
- Javascript Utils.js
\ var Utils ={//字符串格式化StringFormat: function () {if (arguments.length == 0)return null;var str = arg ...
- Java中实现复制文件或文件夹
拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等.但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法. [java] vi ...
- MYSQL内存
全局内存(BASE MEMORY) 线程内存(MEMORY PER CONNECTION) max_conecctions:整个 MySQL 允许的最大连接数; max_user_connection ...
- POJ 3621 Sightseeing Cows 01分数规划,最优比例环的问题
http://www.cnblogs.com/wally/p/3228171.html 题解请戳上面 然后对于01规划的总结 1:对于一个表,求最优比例 这种就是每个点位有benefit和cost,这 ...
- bjfu1100 圆环
这题也是2011百度之星的一道题.知道做法后代码极简单. 不过我做完后随便上网搜了一下,发现竟然还有很多不同的做法.别的做法我就不管了,我只把我的做法的原理说清楚.我做题时是按如下顺序逐步找到规律的: ...
- CSS:7个你可能不认识的单位
原文:7 CSS Units You Might Not Know About 众所周知,当使用CSS技术的时候,很容被一些奇异问题给困住.而当我们面对新的问题时,这会让我们处于非常不利的位置. 但是 ...
- Python xlsx 读取
代码示例 #!/usr/bin/env python import xlrd, sys, re, os workbook = xlrd.open_workbook( sys.argv[1] )for ...
- 2016-3-25突然推送大量消息的问题及查找 -- Sangit
起因:2016年3月25日 18:30 左右,突然接到客户投诉,说APP收到大量的任务推送消息,而且点击进去都是一些过期任务,我们将对此展开追踪,查找问题原因. 过程: 1.当时的第一反应是先查看re ...