Submission #1265729
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 < logInd; 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]; logInd ++; 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 (GCC 5.4.1) |
Score | 300 |
Code Size | 2514 Byte |
Status | AC |
Exec Time | 1 ms |
Memory | 128 KB |
Compile Error
./Main.c: In function ‘main’: ./Main.c:105:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d %d %d", &pocket[0], &pocket[1], &pocket[2]); ^
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 300 / 300 | ||||
Status |
|
|
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 | 0 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 |