UVA 1622 Robot
题意:
给出n*m个格子,每个格子里有一个机器人,可以执行东南西北四种指令,但是移动出格就会爆炸。给出四种指令的个数,求最多完成多少次指令。
分析:
首先对输入数据进行处理,使得cw≥ce、cn≥cs且先执行东西方向的来回移动比先执行南北方向来回移动更佳。然后执行东西移动,然后排序,对比每次向西移动还是开始南北移动更好。当仅剩西和北两个方向后,模拟至结束。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
int main()
{
LL n,m,t=0;
while(cin>>n>>m,m||n)
{
t++;
LL cn,cs,cw,ce,ans=0;
scanf("%lld%lld%lld%lld",&cn,&cs,&cw,&ce);
if(cn<cs)
swap(cs,cn);
if(cw<ce)
swap(ce,cw);
LL t1=n+(m-1)*n*ce*2+(m-1)+(m-1)*(n-1)*cs*2;
LL t2=m+m*(n-1)*cs*2+(n-1)+(m-1)*(n-1)*ce*2;
if(cw-ce)
{
t1+=(m-1)*n;
t2+=(m-1)*(n-1);
}
if(cn-cs)
{
t1+=(m-1)*(n-1);
t2+=m*(n-1);
}
if(t1<t2)
{
swap(m,n);
swap(cn,cw);
swap(cs,ce);
}
int flag=1;
if(ce)
{
ans+=n+(m-1)*n*ce*2;
cw-=ce;
ce=0;
m--;
flag=0;
}
if(cw)
{
ans+=m*n;
--cw;
if(flag)
--m;
}
cw=min(m,cw);
while(cw||cn)
{
if(cs)
{
LL t1=m*n+(n-1)*m*2*cs;
LL t2=m*n+(m-1)*n+(m-1)*(n-1)*(2*cs-1);
if(cn-cs)
{
t1=m*n+(n-1)*m*(2*cs+1);
t2=m*n+(m-1)*n+(m-1)*(n-1)*2*cs;
}
if(t1>t2||!cw)
{
ans+=m+m*(n-1)*cs*2;
cn-=cs;
cs=0;
--n;
if(cn)
ans+=m*n,--cn;
cn=min(n,cn);
}
else
{
ans+=m*n;
--m;
--cw;
}
}
else if(!cw)
ans+=m*cn*(2*n-cn+1)/2,cn=0;
else if(!cn)
ans+=n*cw*(2*m-cw+1)/2,cw=0;
else
{
ans+=m*n;
if(m>n) --m,--cw;
else --n,--cn;
}
}
printf("Case %d: ",t);
printf("%lld\n",ans);
}
return 0;
}
UVA 1622 Robot的更多相关文章
- [ACM_模拟] UVA 12503 Robot Instructions [指令控制坐标轴上机器人移动 水]
Robot Instructions You have a robot standing on the origin of x axis. The robot will be given som ...
- UVa——1600Patrol Robot(A*或普通BFS)
Patrol Robot Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Descripti ...
- 紫书 习题 8-22 UVa 1622 (构造法)
这道题的构造法真的复杂--要推一堆公式--这道题写了几天了--还是没写出来-- 一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA. 然后换了个思路, 觉得是贪心, ...
- UVA 1600 Patrol Robot(机器人穿越障碍最短路线BFS)
UVA 1600 Patrol Robot Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- Uva 12569 Planning mobile robot on Tree (EASY Version)
基本思路就是Bfs: 本题的一个关键就是如何判段状态重复. 1.如果将状态用一个int型数组表示,即假设为int state[17],state[0]代表机器人的位置,从1到M从小到大表示障碍物的位置 ...
- UVa 1600 Patrol Robot (习题 6-5)
传送门: https://uva.onlinejudge.org/external/16/1600.pdf 多状态广搜 网上题解: 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰 ...
- UVa 1600 Patrol Robot(三维广搜)
A robot has to patrol around a rectangular area which is in a form of m x n grid (m rows and ncolumn ...
- UVa 1600 Patrol Robot (BFS最短路 && 略不一样的vis标记)
题意 : 机器人要从一个m * n 网格的左上角(1,1) 走到右下角(m, n).网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示).机器人每次可以往4个方向走一格,但不能连续地穿越k( ...
- UVA 1600 Patrol Robot
带状态的bfs 用一个数(ks)来表示状态-当前连续穿越的障碍数: step表示当前走过的步数: visit数组也加一个状态: #include <iostream> #include & ...
随机推荐
- UVa 1394: And Then There Was One
设置一个数组Winner记录经典约瑟夫问题中的剩余者即可递归解决该问题. 注: 约瑟夫问题:有编号为0~n-1的n个人,从0号开始报数1,2,3......报到k的杀死,然后从下一个人开始继续报数1, ...
- Yeslab现任明教教主数据中心第二门课程UCS 视频教程下载
Yeslab现任明教教主数据中心第二门课程UCS 视频教程下载 视频教程目录 Yeslab现任明教教主数据中心第二门课程UCS.1.介绍UCS.rar Yeslab现任明教教主数据中心第二门课程UCS ...
- 去除input在谷歌下的focus效果
input:focus{outline: -webkit-focus-ring-color auto 0;}
- ios9基础知识(UI)总结
UIWindow.UILabel.UIColor.UIScreen.UIViewController.UIView.UIControl.UIButton.IBOutlet.IBAction.UISte ...
- C++程序设计实践指导1.6分数运算改写要求实现
改写要求:重载>>和<<实现分数类对象的直接输入输出,重载+完成多个分数对象加法 #include <cstdlib> #include <iostream& ...
- 记微信开发(自定义回复&关注回复)
记微信开发(自定义回复&关注回复) 记微信开发(自定义回复&关注回复) code: <?php/** * wechat php test *///define your toke ...
- shell全备份脚本(借鉴别人的,在其基础上修复完善了bug)
#!/bin/bash # Shell script to backup MySql database # Last updated: Aug - MyUSER="root" # ...
- Python网页信息采集:使用PhantomJS采集淘宝天猫商品内容
1,引言 最近一直在看Scrapy 爬虫框架,并尝试使用Scrapy框架写一个可以实现网页信息采集的简单的小程序.尝试过程中遇到了很多小问题,希望大家多多指教. 本文主要介绍如何使用Scrapy结合P ...
- 轻松背后的N+疲惫——系统日志
相信很多coder都有这样的癖好:“自恋”!!对自己编写的code总是那么的自信,自豪,Always believe it to be so perfect!! 不喜欢做单元测试(总觉得它就那样了能出 ...
- SignalR实现实时日志监控
.net SignalR实现实时日志监控 摘要 昨天吃饭的时候,突然想起来一个好玩的事,如果能有个页面可以实时的监控网站或者其他类型的程序的日志,其实也不错.当然,网上也有很多成熟的类似的监控系统 ...