第一次做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;
}
};

浙公网安备 33010602011771号