尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

UVa 559 Squares (II)

UVa 559 Squares (II)
📅 发布时间:2026/6/21 10:47:29

题目描述

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

输入格式

第一行一个整数ggg,表示游戏数量。每个游戏第一行包含三个整数hhh、www、mmm(1≤h,w≤10001 \le h, w \le 10001≤h,w≤1000,0≤m≤1000 \le m \le 1000≤m≤100)。接下来mmm行,每行两个整数rrr、ccc,表示已选择的位置。输入保证移动合法。

输出格式

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

样例

输入

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′=h−r+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×w≤106,m≤100m \le 100m≤100,每次更新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;}

相关新闻

  • 5分钟掌握:iwck键盘鼠标防误触工具实战应用全解析
  • 达州市黄金回收猫腻多怎么办?整理了5家诚信回收店供参考 - 千叶啊
  • 迪庆藏族自治州黄金首饰回收正规门店推荐,附各区回收网点联系方式 - 千叶啊

最新新闻

  • Windows Defender终极控制指南:defender-control开源工具如何彻底掌控系统安全
  • 浙江兆基电力科技:光伏支架安装/防雷接地/电缆铺设一站式服务推荐 - 品牌推荐官
  • LinkSwift:九大网盘直链解析神器,彻底告别下载限速困扰
  • CentOS 7 安装 Hive 为什么总出问题 这些坑比你想象得多
  • DeepSeek-Coder:从代码补全到项目级智能编程的革命性工具
  • 珠海平和语言文化培训学校推荐:企业英语培训/商务英语培训专业之选 - 品牌推荐官

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号