Problem Solving/Topcoder

[Topcoder] SRM417

끄적끄적 2008. 9. 12. 09:47
어제 밤 12시에 있었던 매치..

전날 PM작업하고, 내일은 또 지방내려가야 되서 피곤했다.

참가하지 말까 하다가, 그냥 TV보다 눈좀 붙이고.. 일어나서 참가했다;;
자고 일어나서 컴터키니 시작 30초 전이더라..

1번문제는 그냥 문안한 문제 같아서 풀었는데.. 나중에 보니 Challenge당했다;;
stringstream으로 string을 int로 변환하면 알아서 0은 없애주는데..쓸데없이 0을 빼줄려고 조건문 넣다가 망했다;

2번문제는 문제파악하는데 40분이상 걸림..

가능한 substring중에 사전적으로 먼저오는 단어를 리턴하라는 구문을 주의깊게 보지않은게 패인..

다른 예제들은 이해가 되던데.. 아래 3번예제가 왜 "pi"가 아니고, "ippi"일까를 무쟈게 고민했었다..
결국, 문제파악을 하고 나니 코딩시간도 얼마남지 않고, 코딩내용도 복잡할 거 같고.. 해서 좀 짜보다가 패스..

3)
    
"mississippi"
"promise"
"piccolo"
Returns: "ippi"

2번문제를 challenge해볼까 해서 테스트 샘플을 만들어봤다. 공백이 일반단어보다 우선순위가 높은걸 이용해서, 공백을 중간에 많이 넣는 변수로 테스트하면 challenge가 성공하지 않을까 해서, challenge해봤으나.. 5번인가 모두 실패;

저번 srm에서 challege 성공률이 높았던 것이 오히려 독이 됐다.

덕분에 rating은 무쟈게 떨어지고.. 십이지천게임할때 혈고당에서 보스 하나도 못잡고 뒤졌을때 기분처럼 허탈하다..

실력을 늘리기 위한 노력이 필요함..


아침에 다시 한번 풀어본 소스

SRM417 DIV2 easy

class ReversedSum
{
public:

 
 int toInt(string s)
 {
  stringstream s1(s);
  int t;
  s1 >> t;
  return t;
 }

 string toStr(int num)
 {
  stringstream s;
  s << num;
  return s.str();
 }

 int Rev(int x)
 {
  string s = toStr(x);
  reverse(ALL(s));
  return toInt(s);

 }

 int getReversedSum(int x, int y)
 {
  return Rev(Rev(x) + Rev(y));

 }
};

SRM417 DIV2 mid

class TemplateMatching
{
public:

 int prefix(string s, string a)
 {
  for(int i=min(s.size(), a.size()); i >= 0; i--)
  {
   if( s.substr(0, i) == a.substr(a.size()-i) )
   {
    return i;
   }
  }
  return 0;
 }

 int suffix(string s, string a)
 {
  return prefix(a, s);
 }

 string bestMatch(string t, string p, string s)
 {
  string s1;
  int max = 0, max_pre = 0;
  vector< pair<int, int> > best;
  for(int i=0; i< t.size(); i++)
  {
   for(int j=0; j < t.size()-i; j++)
   {
    s1 = t.substr(i, j+1);
    if( prefix(s1,p)+suffix(s1,s) >= max)
    {
     max = prefix(s1,p)+suffix(s1,s);
     max_pre = prefix(s1,p);
    }
   }
  }
  set<string> sub;

  for(int i=0; i< t.size(); i++)
  {
   for(int j=0; j < t.size()-i; j++)
   {
    s1 = t.substr(i, j+1);
    if( prefix(s1,p)+suffix(s1,s) == max && prefix(s1,p) == max_pre)
    {
     sub.insert(s1);
    }
   }
  }
  set<string>::iterator pos = sub.begin();
  return *pos;

 }
};

반응형