寒假作业~就把文章和题解3道题的代码扔在这里啦——链接: https://pan.baidu.com/s/1kWkGnxd 密码: bhh9

1.HNOI2013游走

#include <bits/stdc++.h>
using namespace std;
#define maxn 600
#define db double
int n, m, degree[maxn];
db f[maxn][maxn], ans[maxn], fans;
bool dis[maxn][maxn]; struct edge
{
int x, y;
db ans;
}R[maxn * maxn]; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} bool cmp(edge a, edge b)
{
return a.ans > b.ans;
} void Gauss()
{
for(int i = ; i <= n; i ++)
{
int now = i, j = i;
for(int j = i + ; j <= n; j ++)
if(fabs(f[j][i]) > fabs(f[now][i])) now = j;
if(i != now)
{
for(int k = ; k <= n + ; k ++)
swap(f[i][k], f[now][k]);
}
for(int j = i + ; j <= n + ; j ++)
f[i][j] /= f[i][i];
for(int j = ; j <= n; j ++)
{
if(j == i) continue;
for(int k = i + ; k <= n + ; k ++)
f[j][k] -= f[j][i] * f[i][k];
}
}
} int main()
{
n = read(), m = read();
for(int i = ; i <= m; i ++)
{
int x = read(), y = read();
R[i].x = x, R[i].y = y;
degree[x] ++, degree[y] ++, dis[x][y] = dis[y][x] = true;
}
n -= ;
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
if(dis[i][j]) f[i][j] = - ( / (db) degree[j]);
else if(i == j) f[i][j] = ;
f[][n + ] = ;
Gauss();
for(int i = ; i <= n; i ++) ans[i] = f[i][n + ];
for(int i = ; i <= m; i ++)
R[i].ans = ((db) ans[R[i].x] / (db) degree[R[i].x]) + ((db) ans[R[i].y] / (db) degree[R[i].y]);
sort(R + , R + + m, cmp);
for(int i = ; i <= m; i ++)
fans += (db) i * R[i].ans;
printf("%.3lf\n", fans);
return ;
}

2.USACO灯

#include <bits/stdc++.h>
using namespace std;
#define maxn 60
int n, m, a[maxn][maxn], ans[maxn], fans = , tot; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void Gauss()
{
for(int i = ; i <= n; i ++)
{
int now = i, j = i;
while(j <= m && !a[j][i]) j ++;
if(j > m) continue;
if(now != j)
{
for(int k = ; k <= n + ; k ++)
swap(a[now][k], a[j][k]);
}
for(int j = ; j <= n; j ++)
if(j != i && a[j][i])
{
for(int k = ; k <= n + ; k ++)
a[j][k] ^= a[i][k];
}
}
} void dfs(int now)
{
if(tot >= fans) return;
if(!now)
{
fans = min(fans, tot);
return;
}
if(a[now][now]) //不是自由元
{
int tem = a[now][n + ];
for(int i = now + ; i <= n; i ++)
if(a[now][i]) tem ^= ans[i];
ans[now] = tem;
if(tem) tot ++;
dfs(now - );
if(tem) tot --;
}
else
{
ans[now] = ;
dfs(now - );
tot ++;
ans[now] = ;
dfs(now - );
tot --;
}
} int main()
{
n = read(), m = read();
for(int i = ; i <= n; i ++)
a[i][i] = , a[i][n + ] = ;
for(int i = ; i <= m; i ++)
{
int x = read(), y = read();
a[x][y] = , a[y][x] = ;
}
Gauss();
dfs(n);
printf("%d", fans);
}

3.NOIP2004虫食算

#include <bits/stdc++.h>
using namespace std;
#define maxn 40
int n, f[maxn][maxn], g[maxn][maxn], d[maxn], x[maxn];
char s[][maxn];
bool vis[maxn], flag; int GCD(int x, int y)
{
int z;
while(y)
{
z = x % y;
x = y, y = z;
}
return x;
} int LCM(int x, int y)
{
return (x * y / GCD(x, y));
} void check()
{
memset(vis, , sizeof(vis));
for(int i = ; i <= n; i ++)
{
int sum = ;
for(int j = ; j <= n; j ++)
sum += d[j] * g[i][j];
if(sum % f[i][i]) return;
sum /= f[i][i];
if(sum < || sum >= n || vis[sum]) return;
vis[x[i] = sum] = true;
}
flag = true;
} void solve()
{
for(int p = ; p <= n; p ++)
{
int now = p;
for(int i = p + ; i <= n; i ++)
if(abs(f[i][p]) > abs(f[now][p])) now = i;
if(now != p)
{
for(int i = ; i <= n; i ++)
swap(f[now][i], f[p][i]), swap(g[now][i], g[p][i]);
}
for(int i = ; i <= n; i ++)
if(i != p && f[i][p])
{
int lcm = LCM(f[i][p], f[p][p]);
int d1 = lcm / f[i][p], d2 = lcm / f[p][p];
for(int j = ; j <= n; j ++)
{
f[i][j] = f[i][j] * d1 - f[p][j] * d2;
g[i][j] = g[i][j] * d1 - g[p][j] * d2;
}
}
}
} void dfs(int u)
{
if(u == )
{
check();
if(flag)
{
for(int i = ; i < n; i ++)
printf("%d ", x[i]);
printf("%d\n", x[n]);
exit();
}
return;
}
d[u] = , dfs(u - );
d[u] = , dfs(u - );
} int main()
{
scanf("%d", &n);
scanf("%s%s%s", s[] + , s[] + , s[] + );
for(int i = ; i <= n; i ++)
for(int j = ; j <= ; j ++)
if(j < ) f[i][s[j][i] - 'A' + ] += ;
else f[i][s[j][i] - 'A' + ] -= ;
for(int i = ; i <= n; i ++)
g[i][i] = n, g[i][i + ] = -;
solve();
dfs(n);
return ;
}

【算法】高斯消元&线性代数的更多相关文章

  1. AcWing 207. 球形空间产生器 (高斯消元)打卡

    有一个球形空间产生器能够在n维空间中产生一个坚硬的球体. 现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. ...

  2. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  3. 高斯消元初步(Gauss算法)

    Gauss算法,称为高斯消元算法,用来解决n元一次方程,在解决线性方程问题起着重要作用. 简述 运用高斯消元的方法,我们可以在O(n3)的时间求出n元线性方程,但是由于时间复杂度的原因,请注意题目数据 ...

  4. P3265 [JLOI2015]装备购买(高斯消元+贪心,线性代数)

    题意; 有n个装备,每个装备有m个属性,每件装备的价值为cost. 小哥,为了省钱,如果第j个装备的属性可以由其他准备组合而来.比如 每个装备属性表示为, b1, b2.......bm . 它可以由 ...

  5. 【CF736D】Permutations 线性代数+高斯消元

    [CF736D]Permutations 题意:有一个未知长度为n的排列和m个条件,第i个条件$(a_i,b_i)$表示第$a_i$个位置上的数可以为$b_i$.保证最终合法的排列的个数是奇数.现在有 ...

  6. 【高斯消元】CDOJ1785 曜酱的线性代数课堂(三)

    高斯消元求行列式板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  7. 【高斯消元】CDOJ1784 曜酱的线性代数课堂(二)

    高斯消元求矩阵秩板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  8. 【高斯消元】CDOJ1783 曜酱的线性代数课堂(一)

    高斯消元求逆矩阵板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  9. 算法复习——高斯消元(ssoi)

    题目: 题目描述 Tom 是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于下面这样的方程组就束手无策了.x+y=3x- ...

随机推荐

  1. python的字典数据类型及常用操作

    字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1: value1, key2: value2} 1.键与值用冒号“:”分开: 2.项与项用逗号“,”分开: 特性: 1.ke ...

  2. 为什么我用了$().height()还是对不齐呢?

    有一个这样的需求:有两个显示内容的框,要使他们高度一致,因为他们存放的内容多少和结构不一样,左边内容少,右边内容多.这就导致了右边会比左边高,解决方法就是超出部分用滚轮显示,那这时就先要调整右边的高度 ...

  3. 一张图理解UINavigationBar,UINavigationItem,UIBarButtonItem,UITabBar,UITabBarItem,UITabBarButton

  4. 终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )

    终于搞定了cxgrid的多行表头 转自:http://mycreature.blog.163.com/blog/static/556317200772524226400/     这一周都在处理dbg ...

  5. tomcat+nginx+keepalived的配置

    tomcat+nginx+keepalived的配置 1.在官网上下载Tomcat 2.将压缩包解压,并且移动到/opt/data/的目录下. .tar.gz /opt/data/ 3.进入到Tomc ...

  6. java中方法的参数传递机制_一个对象被当作参数传递到一个方法后

    一个例子: 在Boy.java类中 在Girl.java类中      在marry方法中的this指的是这个方法所属的对象的引用,在这里指的是girl这个对象 在BoyGirlTest.java测试 ...

  7. 爬虫之request模块高级

    一.cookie&session cookie:服务器端使用cookie来记录客户端的状态信息 实现流程: 执行登陆操作(获取cookie) 在发起个人主页请求时,需要将cookie携带到该请 ...

  8. 阿里云提醒 网站被WebShell木马后门的处理过程

    昨晚凌晨收到新客户的安全求助,说是阿里云短信提示,网站有webshell木马文件被植入,我们SINE安全公司立即成立,安全应急响应小组,客户提供了阿里云的账号密码,随即登陆阿里云进去查看到详情,登陆云 ...

  9. 如何防御网站被ddos攻击 首先要了解什么是流量攻击

    什么是DDOS流量攻击?我们大多数人第一眼看到这个DDOS就觉得是英文的,有点难度,毕竟是国外的,其实简单通俗来讲,DDOS攻击是利用带宽的流量来攻击服务器以及网站. 举个例子,服务器目前带宽是100 ...

  10. Java学习笔记四:Java的八种基本数据类型

    Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...