takapt0226's diary

競技プログラミングのことを書きます

2013-01-08から1日間の記事一覧

POJ 3048 Max Factor

ソースコード int main() { int pf[22222]; CL(pf, -1); for (int i = 2; i <= 20000; ++i) if (pf[i] == -1) for (int j = i; j <= 20000; j += i) pf[j] = i; int res = 1; int n; scanf("%d", &n); while (n--) { int a; scanf("%d", &a); if (pf[a] > pf…

POJ 3173 Parkside's Triangle

ソースコード int main() { int n, s; scanf("%d%d", &n, &s); int a[33][33]; rep(j, n) erep(i, j) { a[i][j] = s; if (++s == 10) s = 1; } rep(i, n) { rep(j, i) printf(" "); for (int j = i; j < n; ++j) printf("%d%c", a[i][j], j + 1 == n ? '\n' …

POJ 3051 Satellite Photographs

ソースコード int w, h; char c[1024][100]; int dfs(int x, int y) { if (!in_rect(x, y, w, h) || c[y][x] != '*') return 0; c[y][x] = '.'; int s = 1; rep(i, 4) s += dfs(x + dx[i], y + dy[i]); return s; } int main() { cin >> w >> h; rep(i, h) c…

POJ 3191 The Moronic Cowmpouter

大きい桁からその桁が必要かを上限下限から判断する方法でやろうとした が、n進数(n > 1)とほとんど同じやり方でできるみたいなのでそうした 参考: wikipedia:en:Negative_base ソースコード vector<int> to_negabase(ll n, int base) { vector<int> res; if (n == 0) </int></int>…

POJ 3184 Finicky Grazers

解法 Dはスペースの個数 / 牛の間隔の個数で求められる Dの計算時の余りはD + 1にできる回数。問題に明記されてない気がするが、この回数分D + 1を使う必要がある最小コストの計算はdpをする dp[i][j] = 牛iを位置(i + D * i + j)に置いたときの最小コストそ…

POJ 3183 Stump Removal

解法 凸 or 平になっている箇所を爆破する ソースコード int main() { const int M = 5 * ten(5) + 10; int n, h[M]; scanf("%d", &n); rep(i, n) scanf("%d", h + i + 1); h[0] = h[n + 1] = 0; for (int i = 1; i <= n; ++i) if (h[i - 1] <= h[i] && h[i]…