Daemon's tech-blog

If you want a miracle, to be the miracle!

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

第一次做TC...惨烈...

DIV 2的250很简单,但是由于经验不足,没有考虑到范围,把ans设成了32767...int的范围应该是2^32.即-2147483648~2147483647.结果被无情地CHA掉!

贴码如下:

思路1:求出所有三个组合可能的最小公倍数,然后取最小者

int gcd(int a, int b)
{
    while (a && b) {
        if (a > b) a %= b;
        else b %= a;
    }
    return a+b;
}


int lcm(int a, int b)
{
    return a*b/gcd(a, b);
}

class LeastMajorityMultiple
{
public:
    int leastMajorityMultiple(int a, int b, int c, int d, int e)
    {
        int ans = 1000000000;
        int temp, i, j, k;
        int x[] = {a, b, c, d, e};
        for (i = 0; i < 3; i++)
            for (j = i+1; j < 4; j++)
                for (k = j+1; k < 5; k++) {
                    temp = lcm(lcm(x[i], x[j]), x[k]);
                    if (temp < ans) ans = temp;
                }
        return ans;
    }
};

思路2:考虑到100*100*100 = 10^6可以枚举....

class LeastMajorityMultiple
{
public:
    int leastMajorityMultiple(int a, int b, int c, int d, int e)
    {
        for (int i = 1; i < 1000000; i++) {
            int cnt = 0;
            if (i % a == 0) cnt++;
            if (i % b == 0) cnt++;
            if (i % c == 0) cnt++;
            if (i % d == 0) cnt++;
            if (i % e == 0) cnt++;
            if (cnt >2) return i;
        }
    }
};

500分那题直接搜...对起点坐标和行,列差枚举即可

class FindingSquareInTable
{
        public:
        int findMaximalSquare(vector <string> table)
        {
                int h = table.size();
                int w = table[0].length();
                int res = -1;
                for (int sr = 0; sr < h; sr++)
                    for (int dr = -h; dr <= h; dr++)
                        for (int sc = 0; sc < w; sc++)
                            for (int dc = -w; dc <= w; dc++) {
                                if (dr ==  0 && dc == 0)
                                    continue;
                                int cur = 0;
                                int r = sr;
                                int c = sc;
                                while (r >= 0 && r < h && c >=0 && c < w){
                                    cur = cur * 10 + (table[r][c] - '0');
                                    int z = (int)sqrt(cur);
                                    if (z * z == cur && res < cur)
                                        res = cur;
                                    r += dr;
                                    c += dc;
                                }
                            }
                return res;
        }
};

 

posted on 2009-02-11 17:34  ACing  阅读(113)  评论(0)    收藏  举报