当前位置: 首页 > news >正文

UVa 559 Squares (II)

题目描述

题目模拟一个方格游戏。棋盘大小为h×wh \times wh×whhh行,www列),坐标(1,1)(1,1)(1,1)为左下角,(1,w)(1,w)(1,w)为右下角,(h,w)(h,w)(h,w)为右上角。玩家每次选择一个空闲方格,然后以其为左下角向右上方向扩展成一个最大可能的不与其他已占方格相交的正方形,并占据该正方形内的所有方格。给定已进行的若干步合法移动,要求找出下一步能形成的最大正方形的左下角坐标和边长。若有多个,选择rrr最小的;若仍相同,选择ccc最小的。

输入格式

第一行一个整数ggg,表示游戏数量。每个游戏第一行包含三个整数hhhwwwmmm1≤h,w≤10001 \le h, w \le 10001h,w10000≤m≤1000 \le m \le 1000m100)。接下来mmm行,每行两个整数rrrccc,表示已选择的位置。输入保证移动合法。

输出格式

对于每个游戏,输出一行:若无合法移动,输出game over;否则输出三个整数rrrcccsss,表示最大正方形的左下角坐标和边长。

样例

输入

2 8 8 4 8 1 3 6 1 4 2 1 500 1000 2 1 1 1 501

输出

5 2 4 game over

题目分析

本题的核心是动态规划计算最大全111正方形,并支持更新(标记已占方格为000)。

坐标转换

输入坐标(r,c)(r, c)(r,c)rrr从底部开始计数,为方便处理,转换为从顶部开始计数的坐标:r′=h−r+1r' = h - r + 1r=hr+1

动态规划

定义dp[i][j]\textit{dp}[i][j]dp[i][j]表示以(i,j)(i, j)(i,j)为右下角的最大全111正方形边长。但本题需要以左下角为起点,可以旋转视角或使用不同的 DP 方向。参考代码使用了从右下角向左上角更新的方式。

更新已占方格

每次移动后,以该点为左下角,扩展出最大正方形,将该正方形内所有方格标记为已占(000)。

查找最优解

在所有空闲方格中,找出能形成的最大正方形的边长。若边长相同,选择rrr最小(即原始坐标最小),若rrr相同则选择ccc最小。

复杂度分析

h×w≤106h \times w \le 10^6h×w106m≤100m \le 100m100,每次更新O(s2)O(s^2)O(s2),总可接受。

代码实现

// Squares (II)// UVa ID: 559// Verdict: Accepted// Submission Date: 2017-04-23// UVa Run Time: 0.880s//// 版权所有(C)2017,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(intargc,char*argv[]){intgames,h,w,m,dp[1100][1100]={0};intr,c,s;cin>>games;for(intg=1;g<=games;g++){cin>>h>>w>>m;for(inty=1;y<=h;y++){for(intx=1;x<=w;x++)dp[y][x]=1;dp[y][w+1]=0;}for(inti=1;i<=m;i++){cin>>r>>c;// translate coordinate.r=h-r+1;// find the maximum size of square at (r, c).for(inti=1;i<=r;i++)for(intj=w;j>=1;j--)if(dp[i][j])dp[i][j]=min(dp[i-1][j],min(dp[i-1][j+1],dp[i][j+1]))+1;// fill the occupied cell.s=dp[r][c];for(inty=0;y<s;y++)for(intx=0;x<s;x++)dp[r-y][c+x]=0;}// find the maximum size of square with smallest r and c.s=0;for(inti=1;i<=h;i++)for(intj=w;j>=1;j--)if(dp[i][j]){dp[i][j]=min(dp[i-1][j],min(dp[i-1][j+1],dp[i][j+1]))+1;if(s<dp[i][j]||(s==dp[i][j]&&(i>r||j<c))){s=dp[i][j];r=i,c=j;}}if(s==0)cout<<"game over\n";else{r=h-r+1;cout<<r<<' '<<c<<' '<<s<<'\n';}}return0;}
http://www.jsqmd.com/news/1054305/

相关文章:

  • Gemini 3.1 Pro办公实战指南:5类稳用任务与3大雷区避坑
  • AXIS2生产级Web服务实战:架构原理、限流审计与云原生适配
  • 5分钟掌握:iwck键盘鼠标防误触工具实战应用全解析
  • 荆州本土装饰企业与全国连锁家装横向测评,县域覆盖、报价、施工体系差异解析 - 互联网科技品牌测评
  • 大连市闲置黄金变现多少钱?本地5家回收门店最新报价参考 - 千叶啊
  • AI 运维工程师 【003篇-2】Windows 10 / Server 2019 部署与优化-001
  • 在线考试软件防作弊机制深度剖析:从客户端绕过到服务端漏洞
  • 达州市黄金回收猫腻多怎么办?整理了5家诚信回收店供参考 - 千叶啊
  • 智能生产调度系统接口自动化测试框架:Pytest实战与CI/CD集成
  • 迪庆藏族自治州黄金首饰回收正规门店推荐,附各区回收网点联系方式 - 千叶啊
  • DSP5685x电话库实战:回声消除与语音编解码在嵌入式通信中的资源优化
  • 自回归模型:时间序列预测不可绕过的底层逻辑与实战指南
  • iFakeLocation:无需越狱的iOS虚拟定位工具,三大平台轻松修改设备位置
  • 项目 Fetch 第二阶段:Claude Opus 4.7 完成任务速度比人类团队快 20 倍!
  • 如何彻底清理显卡驱动残留:DDU工具三步解决驱动冲突难题
  • 东莞市闲置黄金变现多少钱?本地5家回收门店最新报价参考 - 千叶啊
  • 怎样深度掌控AMD Ryzen处理器:专业开源调试工具实战指南
  • ChatGPT不是新软件,而是你该重建的对话式工作习惯
  • GPT-5.5五大变现场景:外贸翻译、音乐分轨、养老短信等实操指南
  • 漯河市黄金回收多少钱一克?本地实体门店回收价格对比整理 - 开始就结束
  • PIC18单片机DMA配置实战:从ADC采样到UART通信的高效数据搬运
  • 嵌入式GUI开发实战:emWin FRAMEWIN控件详解与应用指南
  • 恩施土家族苗族自治州闲置黄金变现多少钱?本地5家回收门店最新报价参考 - 千叶啊
  • MNIST数据集Python加载与预处理实战指南
  • 2026寿县装修售后没人管?楚都壹号院业主:30分钟响应、30年质保,维修不扯皮 - 装企自媒体训练营辉哥
  • 最佳AI写专著利器,快速为你生成20万字优质专著,性价比超高!
  • 2025年阴阳师自动化脚本终极指南:如何彻底解放双手,轻松管理游戏日常
  • 告别模拟器:安卓真机抓包实战与证书锁定绕过指南
  • GTA5线上小助手:终极免费游戏辅助工具完全指南
  • HC08编程器通信故障排查:从硬件连接到软件配置的完整指南