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整数解)的更多相关文章

  1. hdu 2256 Problem of Precision 构造整数 + 矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=2256 题意:给定 n    求解   ? 思路: , 令  , 那么 , 得: 得转移矩阵: 但是上面求出来的并 ...

  2. 29.求3x3的整数矩阵对角线元素之和

    #include <stdio.h> #include <stdlib.h> int main() { ,a[][]; ;i<;i++) { ;j<;j++) sc ...

  3. Gauss 消元(模板)

    /* title:Gauss消元整数解/小数解整数矩阵模板 author:lhk time: 2016.9.11 没学vim的菜鸡自己手打了 */ #include<cstdio> #in ...

  4. cdoj 1250 喵哈哈的矩阵 数学题

    喵哈哈的矩阵 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1250 Desc ...

  5. hdu 5755(Gauss 消元) &poj 2947

    Gambler Bo Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tota ...

  6. 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)

    必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵\(A(u,v)\),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩 ...

  7. 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)

    必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵A(u,v),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩阵定义为 ...

  8. PAT 08-2 求矩阵的局部最大值

    这题挺简单的,但,每日一篇.说两点:第一,我的粗心导致我这题花了大把的时间去找错误,看到4个测试用例对了三个,我以为是那块的边界条件没考虑到,又或者是存在隐蔽的逻辑或语法错误,通过与别人程序的反复对比 ...

  9. Openjudge计算概论-计算矩阵边缘元素之和

    /*======================================================================== 计算矩阵边缘元素之和 总时间限制: 1000ms ...

随机推荐

  1. ActionBarSherlock的学习笔记(四) ------------ ActionBarSherlock中的搜索及SearchView的使用

    在使用ActionBarSherlock定义app的头部操作时,会经常看见搜索的动作,本文主要介绍一下搜索是如何实现的. 1. SearchView 是搜索的核心组件,具体介绍请参考Android官方 ...

  2. 转《深入理解Java虚拟机》学习笔记之最后总结

    编译器 Java是编译型语言,按照编译的时期不同,编译器可分为: 前端编译器:其实叫编译器的前端更合适些,它把*.java文件转变成*.class文件,如Sun的Javac.Eclipse JDT中的 ...

  3. 【MySQL for Mac】终极解决——MySQL在Mac的字符集设置

    这个问题烦恼一天了,现在终于得以解决.分享给大家 首先贴出来,亲测不可行的博客连接: http://www.2cto.com/database/201305/215563.html http://bl ...

  4. 【转】Linux时间函数之gettimeofday()函数之使用方法

    原文网址:http://blog.csdn.net/tigerjibo/article/details/7039434 一.gettimeofday()函数的使用方法: 1.简介: 在C语言中可以使用 ...

  5. JavaScript的事件代理(转)

    如果你想给网页添加点JavaScript的交互性,也许你已经听过JavaScript的事件代理(event delegation),并且觉得这是那些发烧友级别的JavaScript程序员才会关心的什么 ...

  6. 【转】移动web资源整理

    目录(更新于20150311) meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 忽略将页面中的数字识别为电话号码 忽略Android平台中对邮箱地址的识别 当网站添加到主屏幕快速 ...

  7. css的伪元素

    这里想将的是两个伪元素,一个是:first-line——用来向文本的首行添加特殊样式,并且不论该行出现多少单词:只能与块状元素关联. 如下属性可以应用于:first-line伪元素 font属性 co ...

  8. Oracle权限一览表

    权限 所能实现的操作 分析 ANALYZE ANY  分析数据库中的任何表.簇或索引 审计 AUDIT ANY  审计数据库中的任何模式对象 AUDIT SYSTEM  启用与停用语句和特权的审计选项 ...

  9. SQL Server优化50法(转)

    虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决. 查询速度慢的原因很多,常见如下几种: 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) I/ ...

  10. Partitioning by Palindromes

    题意: 给定一个字符串,求能分成最小几个回文串 分析:简单dp dp[i]前i个字符能分成的最小数量 dp[i]=min(dp[i],dp[j-1]+1) (j-i 是回文串) #include &l ...