import java.util.Scanner;
public class Main {
static int H, W;
static String[] B = new String[101];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
H = scanner.nextInt();
W = scanner.nextInt();
for (int y = 0; y < H; y++) {
B[y] = scanner.next();
}
for (int y = 0; y < H; y++) {
for (int x = 0; x < W; x++) {
if (B[y].charAt(x) == '.') {
int c = 0;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
if (dx == 0 && dy == 0) continue;
int xx = x + dx;
int yy = y + dy;
if (0 <= xx && xx < W && 0 <= yy && yy < H) {
if (B[yy].charAt(xx) == '#') c++;
}
}
}
char[] temp = B[y].toCharArray();
temp[x] = (char) ('0' + c);
B[y] = new String(temp);
}
}
}
for (int y = 0; y < H; y++) {
System.out.println(B[y]);
}
}
}
import java.util.*;
publicclass Main {
publicstaticvoid main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int n = s.length();
long same = 0;
Map<Character, Integer> cnt = new HashMap<>();
for (char c : s.toCharArray()) {
cnt.put(c, cnt.getOrDefault(c, 0) + 1);
}
for (int m : cnt.values()) {
same += c2(m);
}
long diff = c2(n) - same;
long ans = diff;
if (same > 0) ans++;
System.out.println(ans);
}
privatestaticlong c2(long n) {
return n * (n - 1) / 2;
}
}
import java.util.*;
publicclass Main {
publicstaticvoid main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] a = newint[N];
int[] c = newint[N];
Map<Integer, Integer> mininumTaste = new HashMap<Integer, Integer>();
for (int i = 0; i < N; i++) {
a[i] = sc.nextInt();
c[i] = sc.nextInt();
}
for (int i = 0; i < N; i++) {
if (mininumTaste.containsKey(c[i])) {
mininumTaste.put(c[i], Math.min(mininumTaste.get(c[i]), a[i]));
} else {
mininumTaste.put(c[i], a[i]);
}
}
int ans = -1;
for (int i : mininumTaste.keySet()) {
ans = Math.max(ans, mininumTaste.get(i));
}
System.out.println(ans);
sc.close();
}
}
ALGO 市には
N 個の駅と
M 個のバス停があり、下図のように道路で結ばれています。 すべての組
(i,j) に対して「駅
i からバス停
j までの所要時間」を足した値はいくつですか?
解答例
import java.util.*;
class Main {
publicstaticvoid main(String[] args) {
Scanner sc = new Scanner(System.in);
// 入力int N = sc.nextInt();
int M = sc.nextInt();
long B = sc.nextLong();
long[] A = newlong[N + 1];
long[] C = newlong[M + 1];
for (int i = 1; i <= N; i++) A[i] = sc.nextLong();
for (int j = 1; j <= M; j++) C[j] = sc.nextLong();
// 答えの計算long Answer = 0;
for (int i = 1; i <= N; i++) Answer += A[i] * M;
Answer += B * N * M;
for (int j = 1; j <= M; j++) Answer += C[j] * N;
// 出力
System.out.println(Answer);
}
};
自分が書いた間違えたコード
マジでどこが間違っているかわからん。将来の私よ、頼んだ。
import java.util.*;
publicclass Main {
publicstaticvoid main(String[] args) {
Scanner sc = new Scanner(System.in);
// インプットを格納していきまーす。int N = sc.nextInt();
int M = sc.nextInt();
int B = sc.nextInt();
int[] A = newint[N];
int[] C = newint[M];
// ここ少し忘れていて、ぜんぜん応え合わないじゃん、ってなって焦った。for (int i = 0; i < A.length; i++) {
A[i] = sc.nextInt();
}
for (int i = 0; i < C.length; i++) {
C[i] = sc.nextInt();
}
// トリマBの時間を求めるで。/* BはNとMの組み合わせ分あるから、次の式で求める。 * 理由:どこから出発しようとも絶対に通るからね。 */int BTime = B * N * M;
// Aの時間、(図で言うなら左)の時間を求めるで。/* 左の時間全部足して、右の数かけてやる感じ。 * 中学校で学んだ分配法則使うで。 */int ATime = 0;
for (int i = 0; i < N; i++) {
ATime += A[i];
}
// System.out.println(ATime);// 上記のコメントは、「え?答え合わないじゃん、どこ間違ってるの?」って軽くデバックした時の名残
ATime = ATime * M;
int CTime = 0;
for (int i = 0; i < M; i++) {
CTime += C[i];
}
// System.out.println(CTime);// 上に同じ。
CTime = CTime * N;
// じゃあ、全部足して、出力するで。
System.out.println(ATime + BTime + CTime);
// ほな、さいなら
sc.close();
}
}