結果

問題 No.540 格子点と経路
ユーザー tanzaku
提出日時 2017-04-17 23:23:47
言語 Java
(openjdk 23)
結果
AC  
実行時間 48 ms / 2,000 ms
コード長 2,956 bytes
コンパイル時間 3,206 ms
コンパイル使用メモリ 79,412 KB
実行使用メモリ 50,600 KB
最終ジャッジ日時 2024-10-05 00:18:32
合計ジャッジ時間 4,875 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import java.io.*;
import java.util.*;
import java.util.stream.LongStream;
public class _p1509_Validate {
public static void main(String[] args) throws IOException {
new _p1509_Validate().solve();
}
static int mod = (int)1e9+7;
void solve() throws IOException {
try (final InputValidator in = new InputValidator(System.in)) {
int w = in.nextInt(0, 100000);
in.space();
int h = in.nextInt(0, 100000);
in.newLine();
in.eof();
System.out.println(solve(w, h));
}
}
long solve(int w, int h) {
long ans = 0;
if (w % 2 == 0 && h % 2 == 0) {
if (w > h) { final int tmp = w; w = h; h = tmp; }
while (w >= 1) {
ans += h * 2 + 1;
w -= 2;
{ final int tmp = w; w = h; h = tmp; }
}
if (w + h > 0) ans++;
} else if (w % 2 == 1 && h % 2 == 1) {
if (w < h) { final int tmp = w; w = h; h = tmp; }
ans = 1;
while (h >= 1) {
ans += 2 * w;
h -= 2;
}
} else {
if (w % 2 == 1) { final int tmp = w; w = h; h = tmp; }
ans = 1;
while (h >= 1) {
ans += 2 * w;
h -= 2;
}
}
return ans;
}
// for debug
static void dump(Object... o) {
System.err.println(Arrays.deepToString(o));
}
static class InputValidator implements Closeable {
final InputStream in;
final int NO_BUFFER = -2;
int buffer;
public InputValidator(final InputStream in) {
this.in = in;
buffer = NO_BUFFER;
}
public char nextChar() throws IOException {
int res = read();
check("#.".indexOf((char)res) >= 0 || Character.isLetterOrDigit(res));
return (char)res;
}
int read() throws IOException {
final int res = buffer == NO_BUFFER ? in.read() : buffer;
buffer = NO_BUFFER;
return res;
}
void unread(int ch) throws IOException {
buffer = ch;
}
// [low, high]
long nextLong(long low, long high) throws IOException {
long val = 0;
int ch = -1;
boolean read = false;
while (true) {
ch = read();
if (!Character.isDigit(ch)) break;
read = true;
val = val * 10 + ch - '0';
check(val <= high);
}
check(read);
check(ch >= 0);
check(val >= low);
unread(ch);
return val;
}
int nextInt(int low, int high) throws IOException { return (int)nextLong(low, high); }
int[] nextInts(int n, int low, int high) throws IOException {
int[] res = new int[n];
for (int i = 0; i < n; i++) {
res[i] = nextInt(low, high);
if (i + 1 != n) space();
}
newLineOrEOF();
return res;
}
void space() throws IOException { int ch = read(); check(ch == ' '); }
void newLine() throws IOException {
int ch = read();
if (ch == '\r') ch = read();
check(ch == '\n');
}
void newLineOrEOF() throws IOException { int ch = read(); check(ch == '\r' || ch == '\n' || ch < 0); }
void eof() throws IOException { int ch = read(); check(ch < 0); }
void check(boolean b) { if (!b) throw new RuntimeException(); }
@Override
public void close() throws IOException {
}
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0