結果
問題 | No.11 カードマッチ |
ユーザー | jp_ste |
提出日時 | 2016-03-02 12:52:41 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 362 ms / 5,000 ms |
コード長 | 2,167 bytes |
コンパイル時間 | 2,539 ms |
コンパイル使用メモリ | 77,648 KB |
実行使用メモリ | 56,096 KB |
最終ジャッジ日時 | 2024-10-11 20:02:10 |
合計ジャッジ時間 | 7,349 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 19 |
ソースコード
import java.util.ArrayList;import java.util.Scanner;public class Main {public static void main(String[] args) {try (Scanner scan = new Scanner(System.in)) {int W = scan.nextInt();int H = scan.nextInt();int N = scan.nextInt();ArrayList<Card> cardList = new ArrayList<>();for(int i=0; i<N; i++) {int mark = scan.nextInt();int number = scan.nextInt();cardList.add(new Card(mark, number));}int numOfEachMark[] = new int[W+1];int numOfEachNumber[] = new int[H+1];boolean useMarks[] = new boolean[W+1];boolean useNumbers[] = new boolean[H+1];for(Card c : cardList) {numOfEachMark[c.mark]++;numOfEachNumber[c.number]++;useMarks[c.mark] = true;useNumbers[c.number] = true;}int ans = 0;for(int i=0; i<useMarks.length; i++) {if(useMarks[i]) {ans += (H - numOfEachMark[i]);}}int numOfFoundNumber[] = new int[H+1];boolean flag[] = new boolean[W+1];for(Card c : cardList) {if(flag[c.mark]) {numOfFoundNumber[c.number]--;} else {flag[c.mark] = true;for(int j=1; j<numOfFoundNumber.length; j++) {if(j != c.number) {numOfFoundNumber[j]++;}}}}for(int i=0; i<useNumbers.length; i++) {if(useNumbers[i]) {ans += (W - numOfEachNumber[i] - numOfFoundNumber[i]);}}System.out.println(ans);}}}class Card {int mark, number;Card(int mark, int number) {this.mark = mark;this.number = number;}}