回形遍历
来源:互联网 发布:yum 安装jdk 编辑:程序博客网 时间:2024/06/05 16:51
我的思路就是模拟
但写错了。
#include<cstdio>#include<iostream>using namespace std;int x,y,n,m,z,xx,t;int main(){ scanf("%d%d%d%d%d",&n,&m,&x,&y,&z); xx=min(x,min(n-x,min(y,m-y))); int w=n-2*(xx)-1,ww=m-2*xx-1; if(n-x==xx) { if(z>=m-xx-y-1){ z-=m-xx-y-1;y+=m-xx-y-1; }else y+=z,z=0; t=3;//左 } if(y==xx){ if(z>=n-xx-x-1) {z-=n-xx-x-1;x+=n-xx-x-1; }else x+=z,z=0; t=2; //下 } if(x==xx) { if(z>=y-xx-1){ z-=y-xx-1;y-=y-xx-1;w--;ww-=2; } else y-=z,z=0; t=1;//右 } if(m-y==xx) { if(z>=x-xx){ z-=x-xx;x-=x-xx;ww--;w-=2; } else x-=z,z=0; t=0; //上 }n--,m--;//printf("%d %d %d\n",x,y,z); while(z){ if(t==0){ if(z-ww<=0){y-=z; break; } y-=ww;z-=ww; ww--;t=1; } else if(t==1){ if(z-w<=0){x+=z; break; } x+=w;z-=w; w--;t=2; } else if(t==2){ if(z-ww<=0){y+=z; break; } y+=ww;z-=ww; ww--;t=3; } else if(t==3){ if(z-w<=0){x-=z; break; } x-=w;z-=w; w--;t=0; } printf("%d %d %d %d %d\n",x,y,z,w,ww); } printf("%d %d",x,y);}
之前初始条件特判错了ac代码
。。。。。。。。。。。
#include<cstdio>#include<iostream>using namespace std;int x,y,n,m,z,xx,t;//t是方向int main(){ scanf("%d%d%d%d%d",&n,&m,&x,&y,&z);n--,m--; xx=min(x,min(n-x,min(y,m-y))); int w,ww;//w是横行走的步数,ww是竖行,每一次需要走的步数是上一行或上一列减一,然后模拟 if(n-x==xx) {//w,ww的初始值因起始位置不同,一共四种情况,特判就行了 if(z>=m-xx-y){ z-=m-xx-y;y+=m-xx-y; }else y+=z,z=0; t=3;//左 ww=m-2*xx-1; w=n-2*xx; } if(y==xx){ if(z>=n-xx-x) {z-=n-xx-x;x+=n-xx-x; }else x+=z,z=0; t=2; //下 ww=m-2*xx; w=n-2*xx; } if(x==xx) { if(z>=y-xx-1){ z-=y-xx-1;y-=y-xx-1; } else y-=z,z=0; ww=m-2*xx-2; w=n-2*xx-1; t=1;//右 } if(m-y==xx) { if(z>=x-xx){ z-=x-xx;x-=x-xx; } else x-=z,z=0; w=n-2*xx-1; ww=m-2*xx-1; t=0; //上 } //printf("%d %d\n",w,ww); //printf("%d %d %d\n",x,y,z); while(z){ if(t==0){ if(z-ww<=0){y-=z; break; } y-=ww;z-=ww; ww--;t=1;//模拟很容易 } else if(t==1){ if(z-w<=0){x+=z; break; } x+=w;z-=w; w--;t=2; } else if(t==2){ if(z-ww<=0){y+=z; break; } y+=ww;z-=ww; ww--;t=3; } else if(t==3){ if(z-w<=0){x-=z; break; } x-=w;z-=w; w--;t=0; } //printf("%d %d %d %d %d\n",x,y,z,w,ww); } printf("%d %d",x,y);}
阅读全文
1 0
- 回形遍历 calc
- 回形遍历
- 二维数组回形遍历
- 回形遍历二维数组
- 二维数组回形遍历
- 回形遍历(算法)
- [Tyvj P4874]回形遍历
- 回形遍历(螺旋遍历)实现-C语言版
- 23:二维数组回形遍历
- OpenJudge[7545]二维数组回形遍历
- 2017.9.23 考试题一:回形遍历
- 23:二维数组回形遍历
- 回型遍历
- 回型遍历
- 遍历
- 遍历
- 遍历
- 遍历
- prison
- HDU 4474 同余模定理+BFS
- Qt常用类QString
- 基于格网的污染物空间分配方法(点值分配到面)
- 创建线程的三种方法
- 回形遍历
- 面向接口编程之二
- 挑战程序设计竞赛 算法和数据结构 第15章 高等图算法
- 数据结构Java实现04----循环链表、仿真链表
- @Pointcut的用法
- Java并发编程 04 中断
- hdu 1325 并查集(坑)
- 飞娃儿啊
- spring数据绑定中使用Int和Integer的区别