Problem Solving/Topcoder

[Topcoder] SRM422 DIV2

끄적끄적 2008. 10. 20. 11:37
주말에 수연이 결혼식참석차 부산다녀오느라 참석을 못했다.

250 easy. 문안한 문제.
class MultiNumber
{
public:
    string toStr(int num)
    {
        stringstream s;
        s << num;
        return s.str();
    }

    string check(int num)
    {   
        string s = toStr(num);
   
        for(int i = 1; i<s.size(); i++)
        {
            int a = 1, b = 1;
            REP(j, i)
                a *= s[j] - '0';
            for(int j=i; j < s.size(); j++)
                b *= s[j] - '0';
            if( a == b ) return "YES";
        }

        return "NO";
    }   
};

500 mid
: 확률에 대한 문제. 확률 개념이 가물가물해서 네이버에서 간단한 이론 조금 둘러본 후에 풀었다.

class PrimeSoccer
{
public:

    bool is_prime(int n)
    {
        if( n == 2 ) return true;
        if( n < 2 || n % 2 == 0 ) return false;

        for(int i = 3; i*i <= n; i++)
        {
            if( n != i && n % i == 0) return false;
        }
        return true;

    }

    double getProbability(int skillOfTeamA, int skillOfTeamB)
    {   
        double sum_A = 0, sum_B = 0;
        double sA = skillOfTeamA;
        double sB = skillOfTeamB;

        //1~18까지 넣을 골수가 prime이 아닌 경우
        for(int i = 0; i <= 18; i++)
        {
            if( is_prime(i) ) continue;

            double pA = 1, pB = 1;
            for(int j=0; j < i; j++)
            {
                pA *= (sA/100.0);
                pB *= (sB/100.0);
            }
            for(int j=i; j < 18; j++)
            {
                pA *= ((100-sA)/100.0);
                pB *= ((100-sB)/100.0);
            }

            for(int j= 18; j>18-i; j--)
            {
                pA *= j;
                pB *= j;
            }
            for(int j= 2; j<= i; j++)
            {
                pA /= j;
                pB /= j;
            }

            sum_A += pA;
            sum_B += pB;
        }

        return 1 - sum_A * sum_B;

    }   
};




반응형