新闻详情

新闻详情

首页 / 资讯中心 / 详情

UVA-12265 贩卖土地 题解答案代码 算法竞赛入门经典第二版

发布时间:2026/9/27 1:57:50来源:尧图网络
UVA-12265 贩卖土地 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版虽然算法竞赛入门经典书中标的是两个星号表示难度较高但是从方法和代码量上来看我觉得和两颗星的难度还差的比较远。当然或许是我直接看了书中的分析再做的缘故。参考书中的方式我的实现如下1. 首先计算每个格子向上连续的空地格数。一起计算的话只需要O(mn)即可。2. 然后是遍历每行再遍历每行中的每个元素计算最大的周长。3. 这里使用了一个链表存储这个元素前面元素的空地和格数根据一定规则调整和删除元素3.1. 如果当前格子是沼泽那么清空链表因为前面的所有元素都不能使用了。3.2. 如果当前元素的高度比之前的短那么之前的更长元素统一调整成当前元素的长度。因为如果要想组成矩形当前高度会作为之前元素的永远的限制。3.3. 如果某个元素的前面的元素要更高或者一样高那么这个元素没必要存在。即之前元素高度和你一样但是矩形长度比你更长因此不管后面走多少步都不会选择你。然后是遍历链表找到最大值并统计最后输出。AC代码#include stdio.h #include map #include list #define MAXMN 1005 using namespace std; int arr[MAXMN][MAXMN]; int m, n; // 当前格往上的连续最高格 int arrTop[MAXMN][MAXMN]; // 存放结果数据 mapint, int mp; void outputArr() { int i, j; for (i 0; i m; i) { for (j 0; j n; j) printf(%d, arrTop[i][j]); putchar(\n); } putchar(\n); } void getArrTop() { int i, j; for (i 0; i n; i) { arrTop[0][i] arr[0][i]; for (j 1; j m; j) { if (arr[j][i] 0) arrTop[j][i] 0; else arrTop[j][i] arrTop[j - 1][i] 1; } } } struct Node { int num, top; }; void printList(listNode ls) { for (auto ip ls.begin(); ip ! ls.end(); ip) { printf(top %d num %d\n, ip-top, ip-num); } } void computed(int line) { int i, j, maxV, value; listNode ls; auto ip ls.begin(), ipt ls.begin(); for (i 0; i n; i) { if (arr[line][i] 0) { // 清空list ls.clear(); continue; } Node no {i, arrTop[line][i]}; ls.push_back(no); // 统一调整限高 for (ip ls.begin(); ip ! ls.end(); ip) { if (ip-top no.top) ip-top no.top; } // 统一计算去掉的情况 ip ls.begin(), ipt ls.begin(); ip; while (ip ! ls.end()) { if (ip-top ipt-top) { ip ls.erase(ip); } else { ipt ip; ip; } } // 统一计算最大值 maxV 0; for (ip ls.begin(); ip ! ls.end(); ip) { value ip-top * 2 2 * (i - ip-num 1); if (maxV value) maxV value; } if (maxV ! 0) { if (!mp[maxV]) mp[maxV] 1; else mp[maxV]; } } } int main() { int t; int i, j; char c; scanf(%d, t); while (t--) { scanf(%d %d, m, n); for (i 0; i m; i) { getchar(); for (j 0; j n; j) { scanf(%c, c); if (c .) arr[i][j] 1; else arr[i][j] 0; } } getArrTop(); mp.clear(); for (i 0; i m; i) computed(i); for (auto ip mp.begin(); ip ! mp.end(); ip) { printf(%d x %d\n, ip-second, ip-first); } } return 0; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

5G网络优化干扰排查全攻略:从分类到定位的实用指南 2026/9/27 5:09:21

5G网络优化干扰排查全攻略:从分类到定位的实用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
会议记录总翻车?2025实测:AI录音卡+智能转写,如何把1小时会议压缩成3分钟精华 2026/9/27 5:09:01

会议记录总翻车?2025实测:AI录音卡+智能转写,如何把1小时会议压缩成3分钟精华

你有没有经历过这种崩溃瞬间——开了2小时的项目评审会,全程录音,会后对着长达3小时的音频文件发呆,从头听一遍?保守估计又要2小时。快进听?关键信息一不留神就滑过去了。自己手动整理会议纪要?写了开头就没…

阅读更多 →
股票查询网站模板wordpress新手入门避坑与加固 2026/9/27 5:09:01

股票查询网站模板wordpress新手入门避坑与加固

股票查询网站模板wordpress新手入门避坑与加固 别再用那些一眼假、配色烂大街的模板了。你辛辛苦苦做的股票查询站,用户点进去第一反应不是“专业”,而是“这网站靠谱吗?会不会偷我钱?”这种不信任感,直接导致跳出率飙升,SEO排名也上不去。…

阅读更多 →
三维CAD关键技术问题探讨(五)—— 半边数据结构 2026/9/27 5:08:55

三维CAD关键技术问题探讨(五)—— 半边数据结构

第05章 半边数据结构 摘要:半边数据结构(Half-Edge Data Structure,HE)是边界表示法中流形表面拓扑表示的事实标准。其核心思想是将每条无向边拆分为两个方向相反的有向半边,并通过对向、后继、所属面等指针&#xff0…

阅读更多 →
网站开发使用的语言类选型最佳实践 2026/9/27 5:08:55

网站开发使用的语言类选型最佳实践

网站开发使用的语言类选型最佳实践 备案流程一头雾水?别慌,这其实是新手最容易踩的坑,但也是建立技术自信的最佳实践起点。很多刚入行的前端开发者,特别是河南本地的初学者,往往纠结于选什么语言,却忽略了部署和合规的基础。…

阅读更多 →
Java 智能体开发:从对话接口到任务执行 2026/9/27 5:08:55

Java 智能体开发:从对话接口到任务执行

摘要 普通 AI 对话接口通常只负责接收问题并生成文本,而智能体还需要理解任务目标、拆分步骤、调用工具、观察执行结果,并在必要时继续行动。Java 后端如果直接在 Controller 中堆叠这些逻辑,很快会变成难以测试、无法恢复、权限边界不清晰的…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉