zoukankan      html  css  js  c++  java
  • poj1657解题报告

    http://poj.org/problem?id=1657

    题目不难 主要就是 考虑每种棋子最短的走法 在使用变量时 里外层使用了同一个变量 i 还有是scnaf()后面没加getchar() WA了几次 下次一定要细心

    dx==dy 说明在一条斜线上

    棋盘上所有的斜线倾斜角都是45

    王min(dx,dy)+abs(x-y) 相当于梯形 走一个斜线再走直线

    代码如下:

     1 #include<iostream>
    2 #include<cstdio>
    3 using namespace std;
    4 template<class T>
    5 T abs(T a)
    6 {
    7 return a>0?a:-a;
    8 }
    9 int king(int dx,int dy)//王走的最短路径是一个梯形课一切成一个等腰直角三角形 上下底的差和高的值相等
    10 {
    11 int min,answer;
    12 min=dx<dy?dx:dy;
    13 answer=min+abs(dx-dy);
    14 return answer;
    15 }
    16 int queen(int dx,int dy)
    17 {
    18 int answer;
    19 if(dx==dy || dx==0 || dy==0)
    20 {
    21 answer=1;
    22 }
    23 else
    24 {
    25 answer=2;
    26 }
    27 return answer;
    28 }
    29 int elephant(int x1,int y1,int x2,int y2,int dx,int dy)
    30 {
    31 bool white_or_black[2];
    32 if(abs(y1-x1)%2==1)
    33 white_or_black[0]=1;
    34 else
    35 white_or_black[0]=0;
    36 if(abs(y2-x2)%2==1)
    37 white_or_black[1]=1;
    38 else
    39 white_or_black[1]=0;
    40 if(white_or_black[0]!=white_or_black[1])
    41 return -1;
    42 else
    43 {
    44 if(dx==dy)
    45 return 1;
    46 else
    47 return 2;
    48 }
    49 }
    50 int car(int dx,int dy)
    51 {
    52 if(dx==0||dy==0)
    53
    54 return 1;
    55 else
    56 return 2;
    57 }
    58 int main()
    59 {
    60 int x1,y1,x2,y2,i,j,k,dx,dy;
    61 char a,b;
    62 int step[5],ncase;
    63 scanf("%d",&ncase);
    64 getchar();
    65 for(i=0;i<ncase;i++)
    66 {
    67
    68
    69
    70 scanf("%c%d %c%d",&a,&x1,&b,&x2);
    71 getchar();
    72 y1=int (a-'a');
    73 y2=int (b-'a');
    74 dx=abs(x1-x2);
    75 dy=abs(y1-y2);
    76 step[0]=king(dx,dy);
    77 step[1]=queen(dx,dy);
    78 step[3]=elephant(x1,y1,x2,y2,dx,dy);
    79 step[2]=car(dx,dy);
    80 if(dx==0&&dy==0)
    81 {
    82 printf("0 0 0 0\n");
    83 continue;
    84 }
    85 for(j=0;j<3;j++)
    86 {
    87 printf("%d ",step[j]);
    88 }
    89 if(step[3]!=-1)
    90 printf("%d\n",step[3]);
    91 else
    92 printf("Inf\n");
    93
    94
    95 }
    96 //system("pause");
    97 return 0;
    98 }

  • 相关阅读:
    文件操作
    集合和深浅copy #
    货郎担问题TSP(dp解法)
    luoguP3413 SAC#1
    luoguP3413 SAC#1
    poj1681 Painter's Problem(gauss+dfs判定)
    日常(身怀绝技的大家)
    poj1830 开关问题(gauss)
    poj1830 开关问题(gauss)
    poj1222 EXTENDED LIGHTS OUT(gauss)
  • 原文地址:https://www.cnblogs.com/yujiaao/p/2114855.html
Copyright © 2011-2022 走看看