카테고리 없음

[Topcoder] SRM152 ~

끄적끄적 2010. 7. 6. 13:51


SRM 152 DIV2 
: 문제해석이 어려운 문제;

class FixedPointTheorem
{
 public double cycleRange(double R)
 { 
  double ret = 0;
  double X = 0.25;
  
  for(int i = 0; i < 200000; i++)
  {   
   X = R * X * (1-X);    
  }
  double max_val = X;
  double min_val = X;
  for(int i = 0; i < 1000; i++)
  {
   X = R * X * (1-X);
   max_val = Math.max(X, max_val);
   min_val = Math.min(X, min_val);
  }
  
  ret = max_val - min_val;
  
  return ret;
 } 
}

SRM 153 DIV2 
: 평이한 문제

class MostProfitable
{
 public String bestItem(int[] c, int[] p, int[] s, String[] items)
 { 
  int size = c.length;
  int[] v = new int[size];
  
  int max1 = 0;
  
  for(int i = 0; i < size ; i++)
  {
   v[i] = (p[i] - c[i]) * s[i];
   max1 = Math.max(max1, v[i]);
  }
  
  if(max1 == 0) return "";
  for(int i =0; i< size; i++)
  {
   if( max1 == v[i]) return items[i];
  }
  
  return "";

 } 
}

SRM 154 DIV2 
: 자바에서 substring이 C++과 좀 다르다.. begin은 0부터 시작하고 end는 자리수+1을 넣어줘야함.
총 길이는 end-begin

class ProfitCalculator
{
 public int percent(String[] items)
 { 
  double price = 0;
  double cost = 0;
  
  for(int i = 0; i < items.length; i++)
  {
   
   price += Double.valueOf(items[i].substring(0, 6));
   cost += Double.valueOf(items[i].substring(7, 13));  
  }
  
  double margin = (price - cost)/price * 100 ;
  
  return Double.valueOf(margin).intValue();
 } 
}

SRM 155 DIV2 
: 자바가 C++보다 좀더 쉬운 문제. toCharArray로  char[]로 전환해서 사용해도 된다.
나는 String으로 해서 처리했는데 보통은 기존수*10 + 붙일 수 형식으로 했네..

class Quipu
{
 public int readKnots(String knots)
 { 
  String ret = "";
  
  int count = 0;
  for(int i = 1; i < knots.length(); i++)
  {     
   if(knots.substring(i, i+1).equals("-"))
   {
    if(count != 0)
     ret += String.valueOf(count);         
    else
     ret += "0";
    count = 0;   
   }   
   else if(knots.substring(i, i+1).equals("X"))
   {
    count += 1;
   }
  }

  return Integer.valueOf(ret);
 } 
}

SRM 156 DIV2 

class DiskSpace
{
 public int minDrives(int[] used, int[] total)
 { 
  int s = used.length;
  int remain = 0;
  
  for( int i=0; i < s; i++)
  {
   remain += used[i]; 
  }
  
  for( int i=0; i< s; i++)
  {
   remain -= total[i];
   if( remain <= 0 ) return i+1;
  }

  return 0;
 } 
}

반응형