SRM614 Div1 Hard

SRM614 Div1 Hard

题目描述

Solution

显然有:
E(x,y)=(E(x−1,y)+E(x,y−1))/2+1E(x,y)=(E(x-1,y)+E(x,y-1))/2+1 E(x,y)=(E(x1,y)+E(x,y1))/2+1
直接高斯消元时间复杂度O((nm)3)O((nm)^3)O((nm)3)

可以发现这种做法十分浪费,消元之后会有大量冗余元素,即零行,我们考虑消去这些不必要状态。

我们发现可以只保留最后一行和最后一列的未知数,用上面的式子表示其他没有保留的格子,再计算答案即可。

时间复杂度O((n+m)3)O((n+m)^3)O((n+m)3)

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=205;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
class TorusSailing
{lod a[MAXN][MAXN],f[MAXN][MAXN][MAXN];private:bool solve(int n){for (int i=0;i<n;i++){int maxj=i;for (int j=i+1;j<n;j++)if (fabs(a[j][i])-fabs(a[maxj][i])>eps) maxj=j;if (fabs(a[maxj][i])<eps) return 0;if (maxj!=i)for (int j=0;j<=n;j++) swap(a[maxj][j],a[i][j]);for (int j=i+1;j<n;j++){double t=a[j][i]/a[i][i];for (int k=i;k<=n;k++) a[j][k]-=t*a[i][k];}}for (int i=n-1;i>=0;i--){for (int j=i+1;j<n;j++) a[i][n]-=a[j][n]*a[i][j];a[i][n]/=a[i][i];}return 1;} int upd(int x,int y,int mods){ return x+y<0?x+y+mods:x+y; }public:lod expectedTime(int n,int m,int X,int Y){n--,m--;for (int i=0;i<n;i++) f[i][m][i]=1;for (int i=0;i<=m;i++) f[n][i][i+n]=1;for (int i=0;i<=n;i++)for (int j=0;j<=m;j++){if (!i&&!j) continue;for (int k=0;k<=n+m+1;k++)f[i][j][k]=(f[upd(i,-1,n+1)][j][k]+f[i][upd(j,-1,m+1)][k])*0.5;f[i][j][n+m+1]++;					
//					for (int k=0;k<=n+m+1;k++) cout<<setw(6)<<f[i][j][k];
//					cout<<endl;} for (int i=0;i<n;i++){for (int j=0;j<=n+m+1;j++) a[i][j]=f[i][m][j];a[i][n+m+1]=-a[i][n+m+1];a[i][i]--;}			for (int i=0;i<=m;i++){for (int j=0;j<=n+m+1;j++) a[i+n][j]=f[n][i][j];a[i+n][n+m+1]=-a[i+n][n+m+1];a[i+n][i+n]--;}			/*for (int i=0;i<=n+m;i++){for (int j=0;j<=n+m+1;j++) cout<<setw(6)<<a[i][j];cout<<endl;}*/solve(n+m+1);lod ans=f[X][Y][n+m+1];for (int i=0;i<=n+m;i++) ans+=f[X][Y][i]*a[i][n+m+1];return ans;}
};
/*
TorusSailing solve;
int main()
{int n=read(),m=read(),X=read(),Y=read();printf("%.11Lf\n",solve.expectedTime(n,m,X,Y));return 0;
}
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知乎个人精选 | 绝版的专业书到哪里找最快最高效?

估计书到用时方恨少是很多软件开发人员的苦恼&#xff0c;当然我这里提到的"少"表示稀少&#xff0c;买不到之意~比如你加入一家政府机构或给为政府机构服务的公司做开发&#xff0c;主要做传统软件&#xff0c;对方需要使用 Win Forms做开发&#xff0c;你打算系统性…

HUD4035Maze

HUD4035Maze 题目描述 Solution 很容易写出期望的式子&#xff1a; 令fif_ifi​表示从iii号节点开始期望几步走出迷宫。 令pi1−ki−eip_i1-k_i-e_ipi​1−ki​−ei​表示选择走向其他边的概率。 令did_idi​表示iii号结点的度数。 fikif1pi∑fjdi10eiAnsf1f_ik_if_1p_i\sum…

正反案例介绍SOLID原则

一.概述SOLID五大原则使我们能够管理解决大多数软件设计问题。由Robert C. Martin在20世纪90年代编写了这些原则。这些原则为我们提供了从紧耦合的代码和少量封装转变为适当松耦合和封装业务实际需求的结果方法。使用这些原则&#xff0c;我们可以构建一个具有整洁&#xff0c;…

LOJ#2145. 「SHOI2017」分手是祝愿

LOJ#2145. 「SHOI2017」分手是祝愿 题目描述 Solution 首先有一个结论&#xff1a; 灯的状态序列a1,a2...ana_1,a_2...a_na1​,a2​...an​唯一对应了一个最优操作序列b1,b2...bnb_1,b_2...b_nb1​,b2​...bn​。 因为编号最大的灯只能由开关自己来改变。 因此&#xff0c;…

ASP.NET Core 中的静态文件

1.前言当我们创建Core项目的时候&#xff0c;Web根目录下会有个wwwroot文件目录&#xff0c;wwwroot文件目录里面默认有HTML、CSS、IMG、JavaScript等文件&#xff0c;而这些文件都是Core提供给客户端使用的静态文件。但是这些静态文件需要在Core里面配置才可以对外公开访问。2…

LOJ#2542. 「PKUWC2018」随机游走

LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求&#xff0c;考虑min−maxmin-maxmin−max容斥&#xff0c;转化为求第一次到达某一个点集的期望时间。 我们对于每一个点集sss&#xff0c;都求出fif_ifi​表示从iii结点到点集s…

基于Kebernetes 构建.NET Core技术中台

今天下午在腾讯云社区社区分享了《基于Kubernetes 构建.NET Core技术中台》&#xff0c;下面是演讲内容的文字实录。我们为什么需要中台我们现在处于企业信息化的新时代。为什么这样说呢&#xff1f;过去企业信息化的主流重心是企业内部信息化。但现在以及未来的企业信息化的主…

P3706 [SDOI2017]硬币游戏

P3706 [SDOI2017]硬币游戏 题目描述 Solution 前置技能&#xff1a; P4548 [CTSC2006]歌唱王国 歌唱王国就是n1n1n1的情况。 我们用类似的方法&#xff0c;先考虑两个串的情况。 设SAS_ASA​表示AAA串最先选到的概率&#xff0c;设SBS_BSB​表示BBB串最先选到的概率。 则…

RedLock 实现分布式锁

并发是程序开发中不可避免的问题&#xff0c;根据系统面向用户、功能场景的不同&#xff0c;并发的重视程度会有不同。从程序的角度来说&#xff0c;并发意味着相同的时间点执行了相同的代码&#xff0c;而有些情况是不被允许的&#xff0c;比如&#xff1a;转账、抢购占库存等…

AGC030D - Inversion Sum

AGC030D - Inversion Sum 题目描述 Solution 考虑dpdpdp&#xff0c;fi,jf_{i,j}fi,j​表示第iii个位置的数大于第jjj个位置的数的概率。 对于每一个询问修改贡献即可。 时间复杂度O(nqn2)O(nqn^2)O(nqn2)。 #include <vector> #include <list> #include <m…

[翻译] NumSharp的数组切片功能 [:]

原文地址&#xff1a;https://medium.com/scisharp/slicing-in-numsharp-e56c46826630翻译初稿&#xff08;英文水平有限&#xff0c;请多包涵&#xff09;&#xff1a;由于Numsharp新推出了数组切片这个牛逼的功能&#xff0c;所以.NET社区距离拥有强大的开源机器学习平台又近…

P3978 [TJOI2015]概率论

P3978 [TJOI2015]概率论 题目描述 Solution 设CnC_nCn​表示nnn个节点的树的个数&#xff08;卡特兰数&#xff09;&#xff0c;SnS_nSn​表示nnn个节点的所有树的叶子的个数和。 Cn∑i0n−1CiCn−i−1[n0]Sn2∑i0n−1SiCn−i−1[n1]C_n\sum_{i0}^{n-1} C_iC_{n-i-1}[n0]\\ …

Visual Studio 2019 16.1发布,更快更高效

Visual Studio 2019 16.1 已正式发布&#xff0c;可以看到&#xff0c;新版本的启动速度有了显著的提升&#xff0c;还节省了不少的内存空间。主要更新如下&#xff1a;IDE现已公开发布 Visual Studio IntelliCode&#xff0c;并且可以随任何支持 C#、C、TypeScipt/JavaScript …

牛顿迭代法

牛顿迭代法 定义 在一般意义下&#xff0c;牛顿迭代法可以求出一个函数的零点&#xff0c;而在多项式意义下&#xff0c;牛顿迭代能够求出&#xff1a;给定一个G(x)G(x)G(x)&#xff0c;求F(x)F(x)F(x)&#xff0c;使得G(F(x))≡0(modxn)G(F(x)) \equiv 0\;\;\;(mod\;\;x^n)G…

.NET Core 3.0之创建基于Consul的Configuration扩展组件

经过前面三篇关于.NET Core Configuration的文章之后&#xff0c;本篇文章主要讨论如何扩展一个Configuration组件出来。如果前面三篇文章没有看到&#xff0c;可以点击如下地址访问.NET Core 3.0之深入源码理解Configuration(一).NET Core 3.0之深入源码理解Configuration(二)…

Mono 和 .NET Core比翼双飞

大家好&#xff0c;今天给大家分享.NET 蓝图之下的Mono和.NET Core 话题&#xff0c;微软在Build 2019 大会上给.NET 做了一个五年规划&#xff0c;所以分享的主题就是《Mono和.NET Core 比翼双飞》&#xff0c;将在完成这个五年规划的时候合体。在开始这个主题之前&#xff0c…

在上司面前硬不起来?教你如何快速将字符串转换为可执行代码

老是因为活不好被上司欺凌&#xff1f;在上司面前很没面子&#xff1f;在上司面前硬不起来&#xff1f; 是时候分享一个可以快速将字符串转换为可执行代码的项目给你了 - YACEP !不过&#xff0c;这不是一篇专门对YACEP 做详细介绍的随笔&#xff0c;想知道更详细的的YACEP 细节…

P4827 [国家集训队] Crash 的文明世界

P4827 [国家集训队] Crash 的文明世界 题目描述 Solution 看到这种kkk次幂的式子&#xff0c;就应该往斯特林数的方面想想。 mn∑i{ni}(ni)i!m^n\sum_i \left\{ \begin{aligned} n \\ i \end{aligned} \right\} \left ( \begin{aligned} n \\ i \end{aligned} \right )i!mn∑…

ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?

事情不太多时&#xff0c;会时不时去看项目中同事写的代码可以作个参考或者学习&#xff0c;个人觉得只有这样才能走的更远&#xff0c;抱着一副老子天下第一的态度最终只能是井底之蛙。前两篇写到关于断点传续的文章&#xff0c;还有一篇还未写出&#xff0c;后续会补上&#…

bzoj#4555. [Tjoi2016Heoi2016]求和

bzoj#4555. [Tjoi2016&Heoi2016]求和 题目描述 Solution 有一个关于第二类斯特林数的公式&#xff1a; {nm}1m!∑i(mk)(m−k)n(−1)k\left\{ \begin{aligned} n \\ m \end{aligned} \right\} \frac{1}{m!}\sum_i \left ( \begin{aligned} m \\ k \end{aligned} \right )…