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"