Google Code Jam 2014 Qualification Round A問題
Problem Statement
$16$ 枚のカードがあって,それぞれ $1$ から $16$ の整数が書かれている.
ある人が $1$ から $16$ までの整数の中の1つを思い浮かべる.
$4$ 行 $4$ 列の各マスの整数の書かれたカード $1$ 枚ずつ置く.
ある人は,思い浮かべた整数のカードが何行目にあるかを言う.
もう1度,並び替えて,$4$ 行 $4$ 列の各マスの整数の書かれたカード $1$ 枚ずつ置き,ある人は,思い浮かべた整数のカードが何行目にあるかを言う.
2回分のカードの配置と何行目にあるかという情報が与えられるので,思い浮かべた整数を当てる問題.
ただし,一意に定まらない場合は,該当する整数がない(矛盾する)場合はそれを指摘する.
それぞれの整数について,該当する行に何回あったかを数えて,$2$ 回あるものが答え.
答えが $0$ 個,$2$ 個以上になった場合は,それに対応するものを出力する.
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<string>
#include<utility>
#include<iostream>
#include<cmath>
using namespace std;
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
int main(){
int T, cnt=0, in[17], r;
int i, j, k, loop;
int ok[17];
scanf("%d",&T);
while(T--){
printf("Case #%d: ", ++cnt);
rep(i,17) ok[i] = 0;
rep(loop,2){
scanf("%d",&r);
rep(i,16) scanf("%d",in+i);
rep(i,4) ok[in[(r-1)*4+i]]++;
}
k = 0;
rep(i,17) if(ok[i]==2) k++, j=i;
if(k==0) puts("Volunteer cheated!");
if(k==1) printf("%d\n", j);
if(k>=2) puts("Bad magician!");
}
return 0;
}
Current time: 2024年03月29日05時42分05秒
Last modified: 2014年04月13日18時05分53秒 (by laycrs)
Tags: Competitive_Programming Google_Code_Jam GCJ_2014 GCJ_2014_Qualification_Round
トップページに戻る
Logged in as: unknown user (not login)