题意:

  给出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;}

转载于:https://www.cnblogs.com/137033036-wjl/p/4945009.html

UVA 1622 Robot相关推荐

  1. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  2. π-Algorithmist分类题目(3)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(3) Probability ...

  3. 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)

    题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...

  4. UVa 1600 Patrol Robot (习题 6-5)

    传送门: https://uva.onlinejudge.org/external/16/1600.pdf 多状态广搜 网上题解: 给vis数组再加一维状态,表示当前还剩下的能够穿越的墙的次数,每次碰 ...

  5. UVA - 12569 Planning mobile robot on Tree (EASY Version) BFS

    题意:有一颗n个节点的树,其中一个节点有机器人,指定m个节点有障碍物,指定终点,问最少需要移动多少步才能到达,移动过程中遇到障碍物需要将其移动到空地. 分析:bfs搜索,是每次都对障碍物进行移动,将障 ...

  6. 【UVa】1600 Patrol Robot(dfs)

    题目 题目 分析 bfs可以搞,但是我还是喜欢dfs,要记忆化不然会T 代码 #include <cstdio> #include <cstring> #include < ...

  7. UVa 1600 巡逻机器人(Patrol Robot)

    机器人要从一个网格的左上角走到右下角,网格中的一些格子是空地,用0表示,障碍物用1表示,机器人每次可以往上下左右走1格,但不能连续的穿过k格障碍,求最短路的长度,起点终点保证是空地. 要点: 本题乍看 ...

  8. UVA - 1600 Patrol Robot (巡逻机器人)(bfs)

    题意:从(1,1)走到(m,n),最多能连续穿越k个障碍,求最短路. 分析:obstacle队列记录当前点所穿越的障碍数,如果小于k可继续穿越障碍,否则不能,bfs即可. #pragma commen ...

  9. UVA 1600 Patrol Robot 巡逻机器人(BFS)

    需要注意的一点是:障碍物可以访问多次(因为当访问此障碍物时,当前路径穿过的连续障碍物次数大于或小于以前的路径也可以访问该点(也许以前的路径并不能走到终点)) #include<cstdio> ...

最新文章

  1. 【学习笔记】超简单的多项式三角函数(含全套证明)
  2. 利用gitHook实现自动部署
  3. Nmap源码分析(端口扫描)
  4. [云炬创业基础笔记]第九章企业的法律形态测试3
  5. QT的QGraphicsAnchorLayout类的使用
  6. 视频编码器的智能化——AI辅助编解码的ASIC解决方案
  7. idea如何彻底删除一个项目
  8. AtomicReference 和 volatile 的区别
  9. shell统计游戏活跃用户数之改进过程分析
  10. ubuntu E470无线网卡驱动
  11. java程序员必须安装的软件
  12. everthing 打开历史记录功能
  13. RTOS 入门资料 整理
  14. 计算机的表白隐藏功能,微信还有这个功能?隐藏代码还能表白!教你高级告白手段...
  15. php pcre 什么用,PHP—PCRE正则表达式性能 - pcre
  16. 开源的去马赛克神器 修复受损漫画无压力
  17. PMI-PBA 商业分析师 认证简介
  18. 全球与中国pH控制剂市场现状及未来发展趋势(2022)
  19. 国人函数概念,稀里糊涂,误人子弟
  20. Windows开源Web服务器性能和压力测试工具

热门文章

  1. sql截去最后一位_sql 取最后一条记录
  2. python优秀库_2017年度15个优秀的数据科学领域Python库
  3. 推荐 | 有三AI生态新的资源干货集中营,好书好工具好内容等你来淘
  4. 全球及中国EDM放电加工机行业运营盈利前景与渠道分析报告2022版
  5. 全球及中国农业保险市场营销状况与运营价值分析报告2022版
  6. lazada选品,东南亚韩潮周边产品爆卖,单日销售额5万美金!
  7. 1090 危险品装箱 (25 分)
  8. python模块之collections模块
  9. 2018提高组训练Day2
  10. 入住cnblogs第一篇随笔 Hello, world!