Problema de numeracion bases cuidado con los overflows
http://www.codeforces.com/contest/602/problem/A
// SRM 590 DIV2-I
problema de string hallar alguna ocurrencia de 5 'o's consecutivos en linea vertical horizontal o diagonal \ o diagonal / (n no es menor que 5)
public class FoxAndGomoku
{
public string win(string [] b)
{
int n = b.Length;
char[][] bb = new char[n][];
for(int i = 0; i < n ; i++)
bb[i] = b[i].ToCharArray();
for(int i = 0; i < n ; i++)
if( b[i].IndexOf("ooooo")>=0)
return "found";
for(int j = 0; j < n ; j++)
{
for(int i = 0; i < n ; i++)
{
int r = i, s=j, count = 0;
while( r < n && s >=0)
{
if(bb[r][s]=='o')
count++;
else
break;
if(count>=5)
return "found";
r++;
}
}
}
for(int i = 0; i < n ; i++)
{
for(int j = 0; j < n ; j++)
{
int r = i, s=j, count = 0;
while( r < n && s < n)
{
if(bb[r][s]=='o')
count++;
else
break;
if(count>=5)
return "found";
r++;s++;
}
}
}
for(int i = 0; i < n ; i++)
{
for(int j = 0; j < n ; j++)
{
int r = i, s=j, count = 0;
while( r < n && s >=0)
{
if(bb[r][s]=='o')
count++;
else
break;
if(count>=5)
return "found";
r++;s--;
}
}
}
return "not found";
}
}
***************
string
win(
vector
<
string
> board)
{
int
d[4][2] = { {1,0}, {0,1}, {1,1}, {-1,1} };
int
w = board[0].size(), h = board.size();
bool
anygood =
false
;
// For each starting cell:
for
(
int
i=0; i<w; i++) {
for
(
int
j=0; j<h; j++) {
for
(
int
k = 0; k < 4; k++) {
// load (dx,dy) from array:
int
dx = d[k][0], dy = d[k][1];
// Is there a line with this direction?
bool
good =
true
;
int
x = i, y = j;
for
(
int
k = 0; k < 5; k++) {
// make sure the new cell is within bounds:
good = (good && (0 <= x && x < w ) && (0 <= y && y < h) );
// make sure it contains o
good = (good && (board[y][x] ==
'o'
) );
// Increase according to (dx,dy).
x += dx;
y += dy;
}
anygood = anygood || good;
}
}
}
return
anygood?
"found"
:
"not found"
;
}
********************
class
FoxAndGomoku:
def
win(
self
, board):
h
=
len
(board)
w
=
len
(board[
0
])
# horizontal: For each (x,y) try: (x,y),(x+1,y),...,(x+4,y)
for
x
in
range
(w
-
4
):
for
y
in
range
(h):
c
=
0
for
i
in
range
(
5
):
if
board[y][x
+
i]
=
=
'o'
:
c
+
=
1
if
c
=
=
5
:
return
"found"
# vertical: For each (x,y) try: (x,y),(x,y+1),...,(x,y+4)
for
x
in
range
(w):
for
y
in
range
(h
-
4
):
c
=
0
for
i
in
range
(
5
):
if
board[y
+
i][x]
=
=
'o'
:
c
+
=
1
if
c
=
=
5
:
return
"found"
#diagonal \ : For each (x,y) try: (x,y),(x+1,y+1),...,(x+4,y+4)
for
x
in
range
(w
-
4
):
for
y
in
range
(h
-
4
):
c
=
0
for
i
in
range
(
5
):
if
board[y
+
i][x
+
i]
=
=
'o'
:
c
+
=
1
if
c
=
=
5
:
return
"found"
#diagonal / For each (x,y) try: (x,y),(x-1,y+1),...,(x-4,y+4)
for
x
in
range
(
4
, w):
for
y
in
range
(h
-
4
):
c
=
0
for
i
in
range
(
5
):
if
board[y
+
i][x
-
i]
=
=
'o'
:
c
+
=
1
if
c
=
=
5
:
return
"found"
return
"not found"