Submission #1265682


Source Code Expand

//
//  main.c
//  A_CookieExchanges
//
//  Created by user1 on 2017/05/06.
//  Copyright © 2017年 user1. All rights reserved.
//

#include <stdio.h>

#define PERSONS 3
#define LOGNUM 10000

int pocket[PERSONS] = {0};

typedef struct LOG {
    int log_pocket[3];
}Log;

Log logs[LOGNUM];
int logInd = 0;

//過去にこの状態を経験したことがないかをチェックする
int validCheck(){
    int ind_pocket;
    int ind_log;
    int ind_log_pocket;
    int hitCount = 0;
    
    int ret = 1;
    
    for(ind_pocket=0; ind_pocket< PERSONS; ind_pocket++){
        for(ind_log = 0; ind_log < LOGNUM; ind_log++){
            for (ind_log_pocket=0; ind_log_pocket<PERSONS; ind_log_pocket++) {
                if(pocket[ind_pocket] == logs[ind_log].log_pocket[ind_log_pocket]){
                    hitCount++;
                    goto find;
                }
            }
        }
    find:
        //一通りみてカブリがなかったら一度も来ていない状態
        if(hitCount == 0){ ret = 1; break;}
        //二つヒットがあったんなら、その時点で、3つしかない上に和は固定なので一度は来た状態だとわかる。
        else if(hitCount >= 2){ ret = -1; break;}
    }
    
    //登録
    logs[logInd].log_pocket[0] = pocket[0];
    logs[logInd].log_pocket[1] = pocket[1];
    logs[logInd].log_pocket[2] = pocket[2];
    
    return ret;
}

//クッキー交換して次の状態にする
int exchange(){
    int i;
    int next[3]={0};
    
    //奇数がないかチェックする
    for (i=0; i<PERSONS; i++) {
        if(pocket[i]%2 == 1){
            //printf("break! ODD_NUM\n");
            return -1;
        }
    }

    //次の状態を計算
    next[1] += pocket[0]/2;
    next[2] += pocket[0]/2;
    
    next[0] += pocket[1]/2;
    next[2] += pocket[1]/2;
    
    next[0] += pocket[2]/2;
    next[1] += pocket[2]/2;
    
    pocket[0] = next[0];
    pocket[1] = next[1];
    pocket[2] = next[2];
    
    //正常終了
    return 1;
}


void solve(){
    int count=0;
    validCheck();
    while(exchange() == 1){
        if(validCheck() == -1){
            printf("%d\n", -1);
            return;
        }
        count ++;
    
    }
    
    printf("%d\n", count);
}

int main(int argc, const char * argv[]) {
    scanf("%d %d %d", &pocket[0], &pocket[1], &pocket[2]);
    solve();
    return 0;
}

Submission Info

Submission Time
Task A - Cookie Exchanges
User cc599
Language C (Clang 3.8.0)
Score 300
Code Size 2498 Byte
Status AC
Exec Time 1 ms
Memory 128 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 3
AC × 17
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, in1.txt, in10.txt, in11.txt, in2.txt, in3.txt, in4.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
in1.txt AC 1 ms 128 KB
in10.txt AC 1 ms 128 KB
in11.txt AC 1 ms 128 KB
in2.txt AC 1 ms 128 KB
in3.txt AC 1 ms 128 KB
in4.txt AC 1 ms 128 KB
in5.txt AC 1 ms 128 KB
in6.txt AC 1 ms 128 KB
in7.txt AC 1 ms 128 KB
in8.txt AC 1 ms 128 KB
in9.txt AC 1 ms 128 KB
sample1.txt AC 1 ms 128 KB
sample2.txt AC 1 ms 128 KB
sample3.txt AC 1 ms 128 KB