CF212DIV2

A题:

    题目呢连接:http://codeforces.com/contest/362/problem/A

刚开始想用DFS搜索,但是忘记了:可以move through"#"这个条件!就是说可以走到"#"(很关键),但不能在这里相聚!

直接委掉了!

先贴下DFS的代码写的很垃圾!

  

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 
 5  int x[4]={-2,2,-2,2};
 6  int y[4]={-2,-2,2,2};
 7 
 8     int t;
 9     char s[10][10];
10     int v[10][10],b[10][10];
11 void visit(int xx,int yy)
12 {
13     for (int i=0;i<=3;i++)
14     {
15         if (xx+x[i]>=1&&yy+y[i]>=1&&xx+x[i]<=8&&yy+y[i]<=8&&!b[xx+x[i]][yy+y[i]])
16         {
17            // if (s[xx+x[i]][yy+y[i]]!='#')
18            //所以省掉了这句 {
19             v[xx+x[i]][yy+y[i]]=v[xx][yy]+1;
20             b[xx+x[i]][yy+y[i]]=1;
21             visit(xx+x[i],yy+y[i]);
22             //}
23         }
24     }
25 }
26 int main()
27 {
28      scanf("%d",&t);
29     while (t--)
30     {
31        // getchar();
32         int x1=0,x2=0,y1=0,y2=0;
33         memset(v,0,sizeof(v));
34         memset(b,0,sizeof(b));
35         for (int i=1;i<=8;i++)
36         {
37             scanf("%s",s[i]);
38             for (int j=8;j>=1;j--)
39             s[i][j]=s[i][j-1];
40         for (int j=1;j<=8;j++)
41         {
42         if (s[i][j]=='K')
43           {
44               if (x1==0&&y1==0)
45              {
46                  x1=i;y1=j;
47 
48                  b[i][j]=1;
49              }
50              else
51              {
52                  x2=i;y2=j;
53              }
54           }
55         }
56     }
57      visit(x1,y1);
58        if (v[x2][y2]%2==0&&v[x2][y2])//
59            printf("YES\n");
60          else printf("NO\n");
61 
62 
63 
64   }
65     return 0;
66 }

 

PS:题目说两个一起走!可以归纳为:A走到B点,但是经过的点数要是偶数点!(不包括A点)

比如:1—>2—>3,走了2,3点!其实正常理解的是1-》2,3->2。

 如果是1-》2-》3-》4,是不能满足的!代码很委,假如有读者看的话,就凑合着看吧!

还有一种数学方法是K1(X1,Y1),K2(X2,Y2);)

因为棋盘很小8*8;如果(x1-x2)%4==0&&(y1-y2)%4==0就可以到达!

 原理可以画:8*8的棋盘.也是和上一题的解法!要过偶数点!

不用暴力!

 

B:http://codeforces.com/contest/362/problem/B

很简单!

代码:不解释了!

 

posted on 2013-11-16 00:56  forgot93  阅读(254)  评论(0编辑  收藏  举报

导航