Problem Solving

[Topcoder] SRM240 ~ 249 연습

끄적끄적 2008. 9. 12. 13:54

SRM240 DIV2
: easy문제 치고는 까다로운 문제..

class Pronunciation
{
public:

 string canPronounce(vector <string> w)
 {
  char sub;
  REP(i, w.size())
  {
   string s = w[i];
   int cnt_v = 0, cnt_c = 0;
   char before, s1;
   REP(j, s.size())
   {
    s1 = toupper(s[j]);

    if(  s1 == 'A' || s1=='E'|| s1 == 'I' || s1 == 'O' || s1 == 'U' )
    {
     cnt_v++;
     cnt_c = 0;
     
     if( j > 0 &&  s1 == before )
      cnt_v--;
    }
    else
    {
     cnt_v = 0;
     cnt_c++;

    }

    if( cnt_v > 1 || cnt_c > 2 )
    {
     return s;
    }
    before = s1;
   }
  }
  return "";

 }
};

SRM241 DIV2
: 블랙잭 규칙을 몰라서, 두번이나 틀렸다..
player만 블랙잭이고, 둘이 비기면 player가 이긴다는 내용이 어디있단 말인가;; 그리 좋지않은 문제..

class BlackjackWinner
{
public:

 int winnings(int bet, int d, int db, int p, int pb)
 {
  if(pb == 1 && db == 1) return 0;
  if(pb == 1 && db == 0) return bet*1.5;
  else if(pb == 0 && db == 1) return -bet;
  if( p > 21) return -1 * bet;
  else if(d > 21) return bet;
  else if(p == d) return 0;
  else if(p > d) return bet;
  else return -bet;
  return 0;

 }
};

SRM242 DIV2
:1) sort한후 reverse하는거 보다 sort(ALL(s), greater<int>()) 로 하는 걸 연습.
 2) 팀별로 vector에 넣은 후에 합을 구할 필요없이, a팀이면 +, b팀이면 - 시키면 바로 해를 구할 수 있었음.

class TeamSplit
{
public:

 int difference(vector <int> s)
 {
  VI a, b;

  sort(ALL(s));
  reverse(ALL(s));
  REP(i, s.size())
  {
   if( i % 2 == 0) a.pb(s[i]);
   else b.pb(s[i]);
  }

  int ateam=0, bteam = 0;
  REP(i, a.size())
   ateam += a[i];

  REP(i, b.size())
   bteam += b[i];

  return ateam - bteam;
 }
};

SRM243 DIV2
(1) pow나 log함수 호출할때 양쪽다 (double)을 씌워주지 않으면 결과가 이상하게 나올 수 있음
(2) int의 INT_MAX와 같이 가장 큰값을 초기에 주는 걸 몰라서, 첫번째 값을 구해서 넣었는데..
double에서는 double min = 1e100; 으로 해주면 되나보다.

class ComputationalComplexity
{
public:

 int fastestAlgo(vector <int> c, vector <int> p, vector <int> l, int N)
 {
  int n = c.size();
  double min = c[0]*pow((double)N, (double)p[0]) * pow(log((double)N), (double)l[0]);
  int ret = 0;
  for(int i = 1; i<n; i++)
  {
   double a1 = c[i]*pow((double)N, (double)p[i]) * pow(log((double)N), (double)l[i]);
   if( min > a1 )
   {
    min = a1;
    ret = i;
   }
  }
  return ret;
 }
};

SRM244 DIV2
: 어디선가 본 듯한 문제

class Grader
{
public:

 vector <int> grade(vector <int> p, vector <int> a)
 {
  vector<int> r(7, 0);
  int n = p.size();
  REP(i, n)
   r[abs(p[i] - a[i])]++;

  REP(i, 7)
   r[i] = r[i] * 100 / n;

  return r;
 }
};

SRM245 DIV2
: 좋은 문제인듯. 나중에 다시 한번 풀어볼 것.

class Straights
{
public:

 int howMany(vector <int> h, int k)
 {
  int ret = 0;
  REP(i, 13-k+1)
  {
   int sub = 1;
   for(int j=0; j<k ; j++)
    sub *= h[i+j];

   ret += sub;
  }

  return ret;
 }
};

SRM246 DIV2

class CalcTest
{
public:

 vector <string> uniform(vector <string> n)
 {
  vector<string> ret;
  REP(i, n.size())
  {
   string s = n[i];
   string r;

   REP(j, s.size())
   {
    if(s[j] == ' ') continue;
    if(s[j] < '0' || s[j] > '9') r += '.';
    else r += s[j];
   }
   ret.pb(r);
  }
  return ret;
 }
};

SRM247 DIV2

class TriangleType
{
public:

 string type(int a, int b, int c)
 {
  vector<int> t;
  t.pb(a);
  t.pb(b);
  t.pb(c);
  sort(ALL(t));

  if( t[0] + t[1] <= t[2]) return "IMPOSSIBLE";
  if( t[0]*t[0] + t[1]*t[1] == t[2]*t[2] ) return "RIGHT";
  if( t[0]*t[0] + t[1]*t[1] > t[2]*t[2] ) return "ACUTE";
  if( t[0]*t[0] + t[1]*t[1] < t[2]*t[2] ) return "OBTUSE";
 }
};

SRM248 DIV2
이전char에서 모음여부를 bool로 가지고 있으면서 비교해 줬어도 되는 문제

class SyllableCounter
{
public:

 int countSyllables(string w)
 {
  int ret = 0;
  REP(i, w.size())
  {
   if((w[i] == 'A' ||  w[i] == 'E' ||  w[i] == 'I' ||  w[i] == 'O' ||  w[i] == 'U' )
    && (i == 0 || (w[i-1]!='A' && w[i-1] != 'E' && w[i-1] != 'I' && w[i-1] != 'O' && w[i-1] != 'U' )))
   {
    ret++;
   }

  }
  return ret;

 }
};

SRM249 DIV2
: name에 ':' 를 붙여서 바로 비교하는 방법도 있었군..

class ChatTranscript
{
public:

 int howMany(vector <string> t, string n)
 {
  int ret = 0;
  string s;
  REP(i, t.size())
  {
   s = t[i];
   if( s.size() > n.size()  && s.substr(0, n.size()) == n && s[n.size()] == ':')
    ret++;
  }

  return ret;
 }
};

반응형