首页 > 其他分享 >0828-T4 聪聪与可可

0828-T4 聪聪与可可

时间:2024-08-29 13:25:18浏览次数:12  
标签:老鼠 0828 return int T4 cat 聪聪 nxtcat mouse

0828-T4 聪聪与可可

题意

猫抓老鼠。

猫每次会走到四周距离老鼠最近的点。若没抓到老鼠还会再走一次。

老鼠每次会等概率向四周走一步,求猫抓到老鼠的期望时间。

思路

与处理出 \(nxt_{i,j}\) 表示猫在 \(i\) 老鼠在 \(j\),猫下一步走到哪里。

\(f_{i,j}\) 表示猫在 \(i\) 老鼠在 \(j\),猫抓到老鼠的期望次数。

若 \(i=j\),\(f_{i,j} = 0\)。

若猫一步吃到老鼠,\(f_{i,j}=1\)。

\[f_{i,j}=\frac{1}{p}\sum f_{k,l} + 1 \]

\(k\) 表示猫下两步走到哪里,\(l\) 表示老鼠周围的点,\(p\) 是老鼠周围的点的个数加一。

使用记忆化搜索实现。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n, m, nxt[N][N], d[N][N];
vector <int> e[N];
double f[N][N];
void bfs(int s) {
	queue <int> q;
	q.push(s);
	while (!q.empty()) {
		int p = q.front(); q.pop();
		for (auto v : e[p]) {
			if (d[s][v] || v == s) continue;
			d[s][v] = d[s][p] + 1;
			q.push(v);
		}
	}
}
double dfs(int cat, int mouse) {
	if (cat == mouse) return f[cat][mouse] = 0;
	int nxtcat = nxt[cat][mouse];
	if (nxtcat == mouse) return f[cat][mouse] = 1;
	nxtcat = nxt[nxtcat][mouse];
	if (nxtcat == mouse) return f[cat][mouse] = 1;
	if (f[cat][mouse]) return f[cat][mouse];
	double res = 1, P = e[mouse].size() + 1;
	res += dfs(nxtcat, mouse) / P;
	for (auto nxtmouse : e[mouse])
		res += dfs(nxtcat, nxtmouse) / P;
	return f[cat][mouse] = res;
}
int main() {
	cin >> n >> m;
	int C, M; cin >> C >> M;
	for (int i = 1, u, v; i <= m; i ++) {
		cin >> u >> v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for (int i = 1; i <= n; i ++) bfs(i);
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= n; j ++) {
			d[0][j] = 1e9; int& p = nxt[i][j]; 
			for (auto v : e[i]) {
				if (d[v][j] < d[p][j]) p = v;
				if (d[v][j] == d[p][j] && v < p) p = v;
			}
		}
	}
	dfs(C, M);
	cout << fixed << setprecision(3) << f[C][M] << "\n";
	return 0;
} 

标签:老鼠,0828,return,int,T4,cat,聪聪,nxtcat,mouse
From: https://www.cnblogs.com/maniubi/p/18386477

相关文章

  • 0828-T3 天气预报
    0828-T3天气预报题意有\(4\times4\)的村庄,有一朵\(2\times2\)的云,需要控制云上下左右移动,保证每个村庄都不会连续\(7\)天以上不下雨,也不会在不能下雨的时间下雨。问是否可以做到。思路搜索。需要注意的是打标记时只用记录时间,云的位置,四个角落的村庄连续未下雨的天......
  • 0828-T2 超级幸运数
    0828-T2超级幸运数题意给出数字\(A\),\(B\)。求出以\(A\),\(B\)为两端的数的最小值。思路分\(AB\)和\(BA\)两种情况。当\(x\)和\(y\)拼接时,\(x\)的尾部和\(y\)的头部可以合并。如\(132\)和\(231\)合并出来为\(13231\)。求出\(x\)和\(y\)的最长公共前......
  • Vant4+Vue3 实现年月日时分时间范围控件
    <van-popup v-model:show="showDatePick" position="bottom" :overlay-style="{zIndex:1000}"> <van-picker-group title="时间范围" :tabs="['开始日期','结束日期']" @confirm="on......
  • GPT应用篇:如何用GPT4.0写一本言情小说?
    写一本言情小说对很多人来说是一件充满挑战但又非常有趣的事情。使用GPT-4.0,可以帮助你快速创作一部完整的小说,从构思大纲到撰写对话,再到完善细节,AI都可以提供有力的支持。以下是如何用GPT-4.0写一本言情小说的详细教程。1.确定小说的主题和设定言情小说通常围绕爱情故事......
  • Study Plan For Python - Part4
    格式化输出1.reprlib模块提供了一个定制化版本的repr()函数,用于缩略显示大型或深层嵌套的容器对象importreprlibreprlib.repr(set('fantabulouslywonderificentamazingness'))#可迭代对象,输出"{'a','b','c','d','e','f',.......
  • Part4-DOM学习笔记-获取元素属性及节点操作
    6.获取元素属性6.1获取元素属性获取元素的属性有两种方式:element.属性:获取内置属性值,元素本身自带的属性不能获取自定义属性代码示例如console.log(div.id)element.getAttribute(‘属性’):可以获取内置属性值可以获取自定义属性代码示例如下:console.......
  • C++竞赛初阶L1-14-第六单元-数组(31~33课)543: T456473 年龄与疾病
    题目内容某医院进行一项研究,想知道某项疾病是否与年龄有关。因此对以往的诊断记录进行整理,统计0-18、19-35、36-60、61及以上这四个年龄段的患者人数占总患者人数的比例。输入格式输入共 2 行。第一行包含一个整数 N(0<n≤100),表示总患者人数。第二行包含 N 个......
  • pve(‌Proxmox Virtual Environment)-GPT4回答的关于CT容器的一些问题
    文章目录前言一、pve中的ct虚拟机是干嘛用的?**CT(容器)与VM(虚拟机)的区别****在PVE中使用CT的优点**二、怎么使用呢,比如我要启动一个nginx容器?1.**创建一个LXC容器**2.**启动并进入容器**3.**在容器中安装Nginx**4.**访问Nginx**5.**管理容器**三、创建一......
  • vant3升级vant4后,使用Toast、Dialog报样式不存在异常解决方法
    异常现象:vant3升级vant4,直接采用v4的方法使用showToast/showDialog,但直接就报错了,如下:[vite]Internalservererror:Failedtoresolveimport"E:/git_sh/project_code/node_modules/vant/es/show-confirm-dialog/style"from"src\service\index.ts".Doesthefile......
  • GPT4SM论文阅读笔记
    AreGPTEmbeddingsUsefulforAdsandRecommendation?论文阅读笔记Abstract现存的问题:​ 尽管LLMs潜力巨大,但关于其文本嵌入是否能帮助广告和推荐服务的讨论却十分有限。提出方法:​ 为了探索GPT嵌入在广告和推荐中的应用,我们提出了三种策略,将LLMs的知识整合到基本P......