8月2日做题还是主题-业余工作-帮忙做西电ACM网站

来源:互联网 发布:java web药店管理系统 编辑:程序博客网 时间:2024/04/28 15:39

        昨天本来打算写BLOG,但是CSDN写BLOG的窗口始终进不去。昨天是建军节。ACM队的老师找我做介绍ACM的网站。我们学校第一次举办如此大赛,我当然很乐意的答应了。当天下午,由于PKU上有周赛,因此没有开始动工,说到周赛,我AC了一道,wa了一道,还有一道,死活想不出怎么得到答案的,不过想想,这三道题我还是可以写出来了。比赛完后我就开始动手做网站了。到网上看看有没有合适的模板。找了几个漂亮的。但是同学说太花了,虽然我做了快一个晚上,这个晚上可能所有的成果都泡汤,不过我觉得简约和大气也是一种美。今天我去了中山大学的ACM网站看了,去了上海交大ACM网站看了。心里也有底的。估计模板我自己做,嵌入CMS管理系统就差不多了。 今天做了大概六道题,有一个题让我特别的兴奋,特放上来共享,这题其实不难,但是花了我挺长时间做出来的。

我的程序代码:

/*

Distance on Chessboard
Time Limit:1000MS  Memory Limit:10000K
Total Submit:6652 Accepted:2155

Description
国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间。如下图所示:


王、后、车、象的走子规则如下:

  • 王:横、直、斜都可以走,但每步限走一格。
  • 后:横、直、斜都可以走,每步格数不受限制。
  • 车:横、竖均可以走,不能斜走,格数不限。
  • 象:只能斜走,格数不限。



写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。

 

Input
第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从"a"到"h",数字从"1"到"8"。

Output
对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"Inf".

Sample Input

 

Sample Output

 

Source
POJ Monthly--2004.05.15 Liu Rujia@POJ

*/

#include "iostream"using namespace std;int main(){int map[9][9],step,x,y,dx,dy;char ch1[3],ch2[3];int n,flag;cin>>n;while(n){cin>>ch1>>ch2;dx=ch2[0]-'a'+1;dy=ch2[1]-'0';x=ch1[0]-'a'+1;y=ch1[1]-'0';step=0;if(x==dx&&y==dy)cout<<0<<" ";else{step=abs(x-dx)>abs(y-dy)?abs(x-dx):abs(y-dy);cout<<step<<" ";}if(x==dx&&y==dy)step=0;else if(abs(x-dx)==abs(y-dy)){step=1;}else if(abs(x-dx)==0||abs(y-dy)==0){step=1;}elsestep=2;cout<<step<<" ";if(x==dx&&y==dy)step=0;else if((abs(x-dx)==0||abs(y-dy)==0)&&abs(x-dx)!=abs(y-dy))step=1;elsestep=2;cout<<step<<" ";flag=0;if(x==dx&&y==dy)step=0;else if(abs(x-dx)==abs(y-dy)&&abs(x-dx))step=1;else if(abs(abs(y-dy)-abs(x-dx))%2){flag=1;cout<<"Inf"<<endl;}else if(abs(y-dy)>abs(x-dx)&&!(abs(abs(y-dy)-abs(x-dx))%2)){if(dy+(abs(abs(y-dy)-abs(x-dx))/2)<=8||dy-(abs(abs(y-dy)-abs(x-dx))/2)>=1)step=2;else if(y+(abs(abs(y-dy)-abs(x-dx))/2)<=8||y-(abs(abs(y-dy)-abs(x-dx))/2)>=1)step=3;else{flag=1;cout<<"Inf"<<endl;}}else if(abs(x-dx)>abs(y-dy)&&!((abs(abs(y-dy)-abs(x-dx))%2))){if(dx+(abs(abs(y-dy)-abs(x-dx))/2)<=8||dx-(abs(abs(y-dy)-abs(x-dx))/2)>=1)step=2;else if(x+(abs(abs(y-dy)-abs(x-dx))/2)<=8||x-(abs(abs(y-dy)-abs(x-dx))/2)>=1)step=3;else{flag=1;cout<<"Inf"<<endl;}}else{flag=1;cout<<"Inf"<<endl;}if(!flag)cout<<step<<endl;n--;}return 0;}

2 1 2 13 1 1 Inf

2a1 c3f5 f8
原创粉丝点击