首页 > 代码库 > topcoder srm 628 div2 250 500
topcoder srm 628 div2 250 500
做了一道题,对了,但是还是掉分了。
第二道题也做了,但是没有交上,不知道对错。
后来交上以后发现少判断了一个条件,改过之后就对了。
第一道题爆搜的,有点麻烦了,其实几行代码就行。
250贴代码:
1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 #include <cmath> 5 #include <cstdio> 6 #include <algorithm> 7 #include <vector> 8 #define LL long long 9 using namespace std;10 11 class BishopMove12 {13 public:14 struct node15 {16 int x, y, step;17 } next, pos;18 int howManyMoves(int r1, int c1, int r2, int c2)19 {20 int vis[10][10], i, a, b;21 memset(vis, 0, sizeof(vis));22 if(r1==r2 && c1==c2)23 return 0;24 25 queue<node>q;26 vis[r1][c1] = 1;27 next.x = r1;28 next.y = c1;29 next.step = 0;30 q.push(next);31 while(!q.empty())32 {33 pos = q.front();34 if(pos.x == r2 && pos.y == c2)35 return pos.step;36 37 q.pop();38 for(i = 1; i <= 7; i ++)39 {40 a = pos.x+i;41 b = pos.y+i;42 if(a>=0&&a<=7 && b>=0 && b<=7 && vis[a][b]==0)43 {44 vis[a][b] = 1;45 next.x = a;46 next.y = b;47 next.step = pos.step+1;48 q.push(next);49 }50 a = pos.x+i;51 b = pos.y-i;52 if(a>=0&&a<=7 && b>=0 && b<=7 && vis[a][b]==0)53 {54 vis[a][b] = 1;55 next.x = a;56 next.y = b;57 next.step = pos.step+1;58 q.push(next);59 }60 a = pos.x-i;61 b = pos.y+i;62 if(a>=0&&a<=7 && b>=0 && b<=7 && vis[a][b]==0)63 {64 vis[a][b] = 1;65 next.x = a;66 next.y = b;67 next.step = pos.step+1;68 q.push(next);69 }70 a = pos.x-i;71 b = pos.y-i;72 if(a>=0&&a<=7 && b>=0 && b<=7 && vis[a][b]==0)73 {74 vis[a][b] = 1;75 next.x = a;76 next.y = b;77 next.step = pos.step+1;78 q.push(next);79 }80 }81 }82 return -1;83 }84 };85 86 int main()87 {88 int r1, c1, r2, c2;89 while(1)90 {91 cin>>r1>>c1>>r2>>c2;92 BishopMove y;93 cout<<y.howManyMoves(r1, c1, r2, c2)<<endl;94 }95 return 0;96 }
500贴代码:
AC代码:
1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <cstdio> 6 #include <vector> 7 #define LL long long 8 using namespace std; 9 10 class BracketExpressions11 {12 public:13 int _max(int c, int d)14 {15 return c > d?c:d;16 }17 int match(char a, char b)18 {19 if(a==‘(‘ && b==‘)‘)20 return 1;21 if(a==‘{‘ && b==‘}‘)22 return 1;23 if(a==‘[‘ && b==‘]‘)24 return 1;25 if(a==‘X‘ &&(b==‘]‘||b==‘}‘||b==‘)‘))26 return 1;27 if(b==‘X‘ && (a==‘[‘||a==‘{‘||a==‘(‘))28 return 1;29 if(a==‘X‘ && b==‘X‘)30 return 1;31 return 0;32 }33 string ifPossible(string expression)34 {35 int i, j, k, g, len;36 int d[100][100];37 string s = expression;38 len = s.size();39 memset(d, 0, sizeof(d));40 for(i = 0; i < len-1; i++)41 if(match(s[i], s[i+1]))42 d[i][i+1] = 1;43 for(k = 2; k < len; k++)44 {45 for(i = 0; i < len-k; i++)46 {47 j = i+k;48 if(match(s[i], s[j])) d[i][j] = d[i+1][j-1] + 1;49 for(g = 0; g < k; g++)50 d[i][j] = _max(d[i][i+g]+d[i+g+1][j], d[i][j]);51 }52 }53 if(2*d[0][len-1]!=len)54 return "impossible";55 else56 return "possible";57 }58 };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。