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. Android 快速开发框架XUtils

    转载自:http://www.apkbus.com/forum.php?mod=viewthread&tid=241060&highlight=xUtils 最近搜了一些框架供初学者学 ...

  2. delphi 对话框初始地址InitialDir

    我的电脑:SaveDialog1.InitialDir := '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}';// My Computer {20D04FE0-3 ...

  3. Asp.net 将DataTable 或者DataSet 转换为Json 格式

    Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...

  4. [Everyday Mathematics]20150125

    试求极限 $$\bex \lim_{x\to 0^+}\int_x^{2x} \frac{\sin^m t}{t^n}\rd t\quad\sex{m,n\in\bbN}. \eex$$

  5. java web 学习九(通过servlet生成验证码图片)

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  6. 网站sqlserver提权操作

    在入侵过程中,得到SQLserver的权限,想进一步得到system权限的方法总结 *************************** 利用xp_cmdshell **************** ...

  7. awk简单使用『摘.非原创』

    1 awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是lin ...

  8. Tour

    题意: 给n个点的坐标,求形成的最短的闭合回路. 分析: 经典问题,dp[i][j]表示有1-i点再由j回到1点的最短距离,i点有两种情况,在去的路径上 dp[i][j]=min(dp[i][j],d ...

  9. 【跟我一起学Python吧】Python 多线程

    其实自我感觉Python的多线程很类似于Java的多线程机制,但是比JAVA的多线程更灵活.在早期的Python多线程实现中,采用了thread模块.例如: from time import ctim ...

  10. Python 变量 对象 引用

    1.变量 变量第一次赋值时被创建,变量在使用前必须赋值 变量本身没有类型,变量类型为它引用的对象类型: 变量在使用时被替换成它引用的对象 2.对象 对象本身具有计数和类型,变量引用对象,当对象的引用变 ...