내일 SRM도 있고.. 한동안 topcoder를 못해본 거 같아 연습삼아 몇개 풀어봤다.
SRM407 DIV2
: 250점짜리 치고 좀 복잡한 문제.. 오랜만에 해서 오래걸리나 했는데.. 매치 결과에도 많이들 못푼 문제다.
나중에 다시 한번 풀어볼 것.
class SpiralWalking
{
public:
int totalPoints(vector <string> m)
{
int idx[] = { 0, 1, 0, -1 };
int idy[] = { 1, 0, -1, 0 };
vector< vector<int> > d;
REP(i, m.size())
{
vector<int> sub;
REP(j, m[0].size())
{
sub.pb(m[i][j]-'0');
}
d.pb(sub);
}
int i = 0, j = 0, index = 0;
int sum = 0;
int w = m[0].size();
int h = m.size();
while(1)
{
if( i+idx[index] < 0 || i+idx[index] >= h || j+idy[index] < 0 || j+idy[index] >= w || d[i+idx[index]][j+idy[index]] == -1)
{
index = (index+1)%4;
if(d[i+idx[index]][j+idy[index]] == -1)
{
sum += d[i][j];
break;
}
i += idx[index];
j += idy[index];
}
else
{
sum += d[i][j];
d[i][j] = -1;
i += idx[index];
j += idy[index];
}
}
return sum;
}
};
SRM408 DIV2
class TournamentJudging
{
public:
int getPoints(vector <int> r, vector <int> c)
{
int ret = 0;
REP(i, r.size())
{
double a = r[i];
double b = c[i];
int s = a / b + 0.5;
ret += s;
}
return ret;
}
};
SRM409 DIV2
class Stick
{
public:
int pieces(int x)
{
int h = 64;
bool down = true;
int index = 64;
vector<int> d;
if( x == 64) return 1;
while(1)
{
if( down) index -= h/2;
else index += h/2;
h /= 2;
if( index <= x ) d.pb(index);
if( index == x ) return d.size();
else if(index > x ) down = true;
else if(index < x ) down = false;
}
}
};
SRM407 DIV2
: 250점짜리 치고 좀 복잡한 문제.. 오랜만에 해서 오래걸리나 했는데.. 매치 결과에도 많이들 못푼 문제다.
나중에 다시 한번 풀어볼 것.
class SpiralWalking
{
public:
int totalPoints(vector <string> m)
{
int idx[] = { 0, 1, 0, -1 };
int idy[] = { 1, 0, -1, 0 };
vector< vector<int> > d;
REP(i, m.size())
{
vector<int> sub;
REP(j, m[0].size())
{
sub.pb(m[i][j]-'0');
}
d.pb(sub);
}
int i = 0, j = 0, index = 0;
int sum = 0;
int w = m[0].size();
int h = m.size();
while(1)
{
if( i+idx[index] < 0 || i+idx[index] >= h || j+idy[index] < 0 || j+idy[index] >= w || d[i+idx[index]][j+idy[index]] == -1)
{
index = (index+1)%4;
if(d[i+idx[index]][j+idy[index]] == -1)
{
sum += d[i][j];
break;
}
i += idx[index];
j += idy[index];
}
else
{
sum += d[i][j];
d[i][j] = -1;
i += idx[index];
j += idy[index];
}
}
return sum;
}
};
SRM408 DIV2
class TournamentJudging
{
public:
int getPoints(vector <int> r, vector <int> c)
{
int ret = 0;
REP(i, r.size())
{
double a = r[i];
double b = c[i];
int s = a / b + 0.5;
ret += s;
}
return ret;
}
};
SRM409 DIV2
class Stick
{
public:
int pieces(int x)
{
int h = 64;
bool down = true;
int index = 64;
vector<int> d;
if( x == 64) return 1;
while(1)
{
if( down) index -= h/2;
else index += h/2;
h /= 2;
if( index <= x ) d.pb(index);
if( index == x ) return d.size();
else if(index > x ) down = true;
else if(index < x ) down = false;
}
}
};
반응형