• 可以发现具有非常多的方程, 然后高斯消元就能85分
  • 然而我们发现这些方程组成了一些环, 我们仅仅设出一部分变量即可获得N个方程, 就可以A了
  • trick 合并方程
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <iostream>
#include <cmath>
#define ldb long double
#define ll long long
#define mmp make_pair
#define M 222
using namespace std;
int read() {
int nm = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
return nm * f;
}
int n, m, x, y; int id[M][M], cnt;
double d[M][M];
double f[M][M][M];
void gauss() {
for(int i = 0; i <= cnt; i++) {
int k = i;
for(int j = i + 1; j <= cnt; j++) if(fabs(d[j][i]) > fabs(d[k][i])) k = j;
if(k != i) for(int j = 0; j <= cnt + 1; j++) swap(d[i][j], d[k][j]);
for(int j = 0; j <= cnt; j++) {
if(i == j) continue;
double t = d[j][i] / d[i][i];
for(int k = 0; k <= cnt + 1; k++) d[j][k] -= d[i][k] * t;
}
}
}
int main() {
n = read(), m = read(), x = read(), y = read();
for(int i = 0; i < m; i++) f[n][i][i] = 1;
for(int i = n - 1; i > x; i--) {
double d = 0.5;
for(int j = 0; j < m; j++,d *= 0.5)
for(int k = 0; k <= m; k++)
f[i][0][k] += d * f[i + 1][j][k];
d *= 2;
f[i][0][m] += 2.0 - d * 2.0;
for(int k = 0; k <= m; k++)
f[i][m][k] = (f[i][0][k] *= 1.0 / (1.0 - d));
for(int j = m - 1; j > 0; j-- ) {
for(int k = 0; k <= m; k++)
f[i][j][k] += 0.5 * (f[i][j + 1][k] + f[i + 1][j][k]);
f[i][j][m] += 1.0;
}
}
for(int i = y - 1; i >= 0; i--) {
for(int k = 0; k <= m; k++)
f[x][i][k] += 0.5 * (f[x][i + 1][k] + f[x + 1][i][k]);
f[x][i][m] += 1.0;
}
for(int k = 0; k <= m; k++)
f[x][m][k] = f[x][0][k];
for(int i = m - 1; i>y; i--) {
for(int k = 0; k <= m; k++)
f[x][i][k] += 0.5 * (f[x][i + 1][k] + f[x + 1][i][k]);
f[x][i][m] += 1.0;
}
for(int i = x - 1; i >= 0; i--) {
double d = 0.5;
for(int j = 0; j < m; j++,d *= 0.5)
for(int k = 0; k <= m; k++)
f[i][0][k] += d * f[i + 1][j][k];
d *= 2;
f[i][0][m] += 2.0 - d * 2.0;
for(int k = 0; k <= m; k++)
f[i][m][k] = (f[i][0][k] *= 1.0 / (1.0 - d));
for(int j = m - 1; j > 0; j--) {
for(int k = 0; k <= m; k++)
f[i][j][k] += 0.5 * (f[i][j + 1][k] + f[i + 1][j][k]);
f[i][j][m] += 1.0;
}
}
memcpy(d,f[0],sizeof(d));
cnt = m - 1;
for(int k = 0; k < m; k++) d[k][k] -= 1.0;
gauss();
printf("%.6lf\n",-d[0][m]/d[0][0]);
return 0;
}

Problem A: Apple(高斯消元)的更多相关文章

  1. HihoCoder 1195 高斯消元·一(高斯消元)

    题意 https://hihocoder.com/problemset/problem/1195 思路 高斯消元是解决高元方程的一种算法,复杂度 \(O(n^3)\) . 过程大致是: 构造一个未知数 ...

  2. 【POJ】1830 开关问题(高斯消元)

    http://poj.org/problem?id=1830 高斯消元无解的条件:当存在非法的左式=0而右式不等于0的情况,即为非法.这个可以在消元后,对没有使用过的方程验证是否右式不等于0(此时因为 ...

  3. POJ 1681---Painter's Problem(高斯消元)

    POJ   1681---Painter's Problem(高斯消元) Description There is a square wall which is made of n*n small s ...

  4. POJ 1681 Painter's Problem(高斯消元+枚举自由变元)

    http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...

  5. POJ 1681 Painter's Problem 【高斯消元 二进制枚举】

    任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total ...

  6. poj 1681 Painter&#39;s Problem(高斯消元)

    id=1681">http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. ...

  7. POJ - 1681: Painter's Problem (开关问题-高斯消元)

    pro:开关问题,同上一题. 不过只要求输出最小的操作步数,无法完成输出“inf” sol:高斯消元的解对应的一组合法的最小操作步数. #include<bits/stdc++.h> #d ...

  8. HDU 4818 RP problem (高斯消元, 2013年长春区域赛F题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4818 深深地补一个坑~~~ 现场赛坑在这题了,TAT.... 今天把代码改了下,过掉了,TAT 很明显 ...

  9. UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

随机推荐

  1. python利用requests和threading模块,实现多线程爬取电影天堂最新电影信息。

    利用爬到的数据,基于Django搭建的一个最新电影信息网站: n1celll.xyz  (用的花生壳动态域名解析,服务器在自己的电脑上,纯属自娱自乐哈.) 今天想利用所学知识来爬取电影天堂所有最新电影 ...

  2. Python之jieba库的使用

    jieba库,它是Python中一个重要的第三方中文分词函数库. 1.jieba的下载 由于jieba是一个第三方函数库,所以需要另外下载.电脑搜索“cmd”打开“命令提示符”,然后输入“pip in ...

  3. Exception和解决方案

    org.hibernate.HibernateException: No Session found for current thread sessionFactory org.springframe ...

  4. 网络编程一定要看过的socket另一座大山

    上次的socket还有很多坑.但是总是在不断的改进的.下面就来看看一个升级版的内容 import socket server = socket.socket() ip_port = ("19 ...

  5. ImportError: dynamic module does not define module export function (PyInit__sqlite3)

    使用python3.6 中的django-admin创建项目的时候报错 ImportError: dynamic module does not define module export functi ...

  6. Linux 配置SSH免密登陆

    1.在hadoop01服务器上 通过ssh -keygen 生成公私钥  [ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa] 2.把公钥给hadoop02服务器 3. ...

  7. MySQL Hardware--NUMA与MySQL

    MUMA架构 在单实例的MySQL服务器上,通过会为MySQL的Buffer Pool分配50%至70%甚至更高的内存,让MySQL 服务会尽可能多地占用系统资源.在基于NUMA系统中,内存被分配到各 ...

  8. layui select 选完其他选项, 手工清空选项 又恢复最初的选项?

    启用layui的select  下拉搜索项: lay-search <div class="layui-inline"> <label class="l ...

  9. error: Cannot find OpenSSL's <evp.h> Mac

    问题 mac安装php需要openssl ./configure –with-openssl 报错 error: Cannot find OpenSSL’s 解决 brew install opens ...

  10. Unity 3D中的阴影设置

    在Unity 3D中,经常需要用到光照阴影,即Directional Light的Shadow,Shadow分为Hard Shadow和Soft Shadow.区别是Soft Shadow的阴影边缘比 ...