#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
struct man{
char nick[55];
bool isSpy;
int voted;
};
man spy[105];
man nor[105];
int cntSpy, cntNor, oriNor, tarNor, leftNor;
int cntTot;
bool tarIsSpy;
int tarVoted, tarVotedCnt, tarVotedPos;
char tarNick[55];
void init(){
srand(time(NULL));
while(1){
man tmp; int isSpy;
if(scanf("%s %d", tmp.nick, &isSpy)==EOF) break;
if(isSpy == 1){
tmp.isSpy = true;
spy[cntSpy++] = tmp;
}
else{
tmp.isSpy = false;
nor[cntNor++] = tmp;
}
}
oriNor = cntNor;
leftNor = tarNor = (oriNor + 1) / 2;
}
int getRand(int maxVal){
return rand()%maxVal;
}
void voteAll(int voter, char nick[]){
int tar;
int cnt = cntSpy + cntNor;
int rnd;
while( (rnd = getRand(cnt) ) == voter);
if( rnd >= cntNor ){
spy[rnd-cntNor].voted++;
if(tarVoted == spy[rnd-cntNor].voted) tarVotedCnt++;
if(tarVoted < spy[rnd-cntNor].voted){
tarVotedCnt = 1;
tarVoted = spy[rnd-cntNor].voted;
tarVotedPos = rnd-cntNor;
tarIsSpy = true;
strcpy(tarNick,spy[rnd-cntNor].nick);
}
printf("%s -> %s",nick, spy[rnd-cntNor].nick);
}
else{
nor[rnd].voted++;
if(tarVoted == nor[rnd].voted) tarVotedCnt++;
if(tarVoted < nor[rnd].voted){
tarVotedCnt = 1;
tarVoted = nor[rnd].voted;
tarVotedPos = rnd;
tarIsSpy = false;
strcpy(tarNick,nor[rnd].nick);
}
printf("%s -> %s",nick, nor[rnd].nick);
}
}
void voteNor(char nick[]){
int tar;
int cnt = cntNor;
int rnd = getRand(cnt);
nor[rnd].voted++;
if(tarVoted == nor[rnd].voted) tarVotedCnt++;
if(tarVoted < nor[rnd].voted){
tarVotedCnt = 1;
tarVoted = nor[rnd].voted;
tarVotedPos = rnd;
tarIsSpy = false;
strcpy(tarNick,nor[rnd].nick);
}
printf("%s -> %s",nick, nor[rnd].nick);
}
int main(){
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
init();
int dayCnt = 0;
while(1){
printf("%d번째 투표입니다.\n", ++dayCnt);
for(int i=0;i<cntNor;i++){
nor[i].voted = 0;
}
for(int i=0;i<cntSpy;i++){
spy[i].voted = 0;
}
tarVotedCnt = 0;
tarVoted = 0;
tarVotedPos = -1;
for(int i=0;i<cntNor;i++){
if(i!=0) printf(", ");
voteAll(i,nor[i].nick);
}
for(int i=0;i<cntSpy;i++){
printf(", ");
voteNor(spy[i].nick);
}
printf("\n");
printf("%s님: %d표", nor[0].nick, nor[0].voted);
for(int i=1 ;i<cntNor;i++){
printf(", %s님: %d표", nor[i].nick, nor[i].voted);
}
for(int i=0;i<cntSpy;i++){
printf(", %s님: %d표", spy[i].nick, spy[i].voted);
}
printf("\n");
if(tarVotedCnt != 1){
printf("※ 동표가 발생하여 이번 투표는 무효로 합니다.\n");
}
else{
printf("※ 다수결로 %s님을 처형했습니다.\n", tarNick);
if(tarIsSpy == true){
printf("※ %s님은 스파이였습니다.\n",tarNick);
printf("※ 일반군의 승리로 게임이 종료됩니다.\n");
break;
}
else{
for(int i = tarVotedPos; i<cntNor; i++){
nor[i] = nor[i+1];
}
cntNor--;
leftNor--;
if(leftNor <= 0){
printf("※ 과반의 일반군(%d명)을 처형했습니다.\n", tarNor);
printf("※ 스파이의 승리로 게임이 종료됩니다.\n");
break;
}
}
}
printf("\n\n");
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8dGltZS5oPgojaW5jbHVkZTxzdGRsaWIuaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlPHZlY3Rvcj4KCnN0cnVjdCBtYW57CiAgY2hhciBuaWNrWzU1XTsKICBib29sIGlzU3B5OwogIGludCB2b3RlZDsKfTsKCm1hbiBzcHlbMTA1XTsKbWFuIG5vclsxMDVdOwppbnQgY250U3B5LCBjbnROb3IsIG9yaU5vciwgdGFyTm9yLCBsZWZ0Tm9yOwppbnQgY250VG90OwoKYm9vbCB0YXJJc1NweTsKaW50IHRhclZvdGVkLCB0YXJWb3RlZENudCwgdGFyVm90ZWRQb3M7CmNoYXIgdGFyTmlja1s1NV07Cgp2b2lkIGluaXQoKXsKCiAgc3JhbmQodGltZShOVUxMKSk7CgogIHdoaWxlKDEpewogICAgbWFuIHRtcDsgaW50IGlzU3B5OwogICAgaWYoc2NhbmYoIiVzICVkIiwgdG1wLm5pY2ssICZpc1NweSk9PUVPRikgYnJlYWs7CiAgICBpZihpc1NweSA9PSAxKXsKICAgICAgdG1wLmlzU3B5ID0gdHJ1ZTsKICAgICAgc3B5W2NudFNweSsrXSA9IHRtcDsKICAgIH0KICAgIGVsc2V7CiAgICAgIHRtcC5pc1NweSA9IGZhbHNlOwogICAgICBub3JbY250Tm9yKytdID0gdG1wOwogICAgfQogIH0KCiAgb3JpTm9yID0gY250Tm9yOwogIGxlZnROb3IgPSB0YXJOb3IgPSAob3JpTm9yICsgMSkgLyAyOwp9CgppbnQgZ2V0UmFuZChpbnQgbWF4VmFsKXsKICByZXR1cm4gcmFuZCgpJW1heFZhbDsKfQoKdm9pZCB2b3RlQWxsKGludCB2b3RlciwgY2hhciBuaWNrW10pewogIGludCB0YXI7CiAgaW50IGNudCA9IGNudFNweSArIGNudE5vcjsKICBpbnQgcm5kOwogIHdoaWxlKCAocm5kID0gZ2V0UmFuZChjbnQpICkgPT0gdm90ZXIpOwogIGlmKCBybmQgPj0gY250Tm9yICl7CiAgICBzcHlbcm5kLWNudE5vcl0udm90ZWQrKzsKICAgIGlmKHRhclZvdGVkID09IHNweVtybmQtY250Tm9yXS52b3RlZCkgdGFyVm90ZWRDbnQrKzsKICAgIGlmKHRhclZvdGVkIDwgc3B5W3JuZC1jbnROb3JdLnZvdGVkKXsKICAgICAgdGFyVm90ZWRDbnQgPSAxOwogICAgICB0YXJWb3RlZCA9IHNweVtybmQtY250Tm9yXS52b3RlZDsKICAgICAgdGFyVm90ZWRQb3MgPSBybmQtY250Tm9yOwogICAgICB0YXJJc1NweSA9IHRydWU7CiAgICAgIHN0cmNweSh0YXJOaWNrLHNweVtybmQtY250Tm9yXS5uaWNrKTsKICAgIH0KICAgIHByaW50ZigiJXMgLT4gJXMiLG5pY2ssIHNweVtybmQtY250Tm9yXS5uaWNrKTsKICB9CiAgZWxzZXsKICAgIG5vcltybmRdLnZvdGVkKys7CiAgICBpZih0YXJWb3RlZCA9PSBub3Jbcm5kXS52b3RlZCkgdGFyVm90ZWRDbnQrKzsKICAgIGlmKHRhclZvdGVkIDwgbm9yW3JuZF0udm90ZWQpewogICAgICB0YXJWb3RlZENudCA9IDE7CiAgICAgIHRhclZvdGVkID0gbm9yW3JuZF0udm90ZWQ7CiAgICAgIHRhclZvdGVkUG9zID0gcm5kOwogICAgICB0YXJJc1NweSA9IGZhbHNlOwogICAgICBzdHJjcHkodGFyTmljayxub3Jbcm5kXS5uaWNrKTsKICAgIH0KICAgIHByaW50ZigiJXMgLT4gJXMiLG5pY2ssIG5vcltybmRdLm5pY2spOwogIH0KfQoKdm9pZCB2b3RlTm9yKGNoYXIgbmlja1tdKXsKICBpbnQgdGFyOwogIGludCBjbnQgPSBjbnROb3I7CiAgaW50IHJuZCA9IGdldFJhbmQoY250KTsKICBub3Jbcm5kXS52b3RlZCsrOwogIGlmKHRhclZvdGVkID09IG5vcltybmRdLnZvdGVkKSB0YXJWb3RlZENudCsrOwogIGlmKHRhclZvdGVkIDwgbm9yW3JuZF0udm90ZWQpewogICAgdGFyVm90ZWRDbnQgPSAxOwogICAgdGFyVm90ZWQgPSBub3Jbcm5kXS52b3RlZDsKICAgIHRhclZvdGVkUG9zID0gcm5kOwogICAgdGFySXNTcHkgPSBmYWxzZTsKICAgIHN0cmNweSh0YXJOaWNrLG5vcltybmRdLm5pY2spOwogIH0KICBwcmludGYoIiVzIC0+ICVzIixuaWNrLCBub3Jbcm5kXS5uaWNrKTsKfQoKaW50IG1haW4oKXsKICAvL2ZyZW9wZW4oImlucHV0LnR4dCIsInIiLHN0ZGluKTsKICAvL2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwoKICBpbml0KCk7CgogIGludCBkYXlDbnQgPSAwOwogIHdoaWxlKDEpewogICAgcHJpbnRmKCIlZOuyiOynuCDtiKztkZzsnoXri4jri6QuXG4iLCArK2RheUNudCk7CiAgICBmb3IoaW50IGk9MDtpPGNudE5vcjtpKyspewogICAgICBub3JbaV0udm90ZWQgPSAwOwogICAgfQogICAgZm9yKGludCBpPTA7aTxjbnRTcHk7aSsrKXsKICAgICAgc3B5W2ldLnZvdGVkID0gMDsKICAgIH0KICAgIHRhclZvdGVkQ250ID0gMDsKICAgIHRhclZvdGVkID0gMDsKICAgIHRhclZvdGVkUG9zID0gLTE7CgogICAgZm9yKGludCBpPTA7aTxjbnROb3I7aSsrKXsKICAgICAgaWYoaSE9MCkgcHJpbnRmKCIsICIpOwogICAgICB2b3RlQWxsKGksbm9yW2ldLm5pY2spOwogICAgfQogICAgZm9yKGludCBpPTA7aTxjbnRTcHk7aSsrKXsKICAgICAgcHJpbnRmKCIsICIpOwogICAgICB2b3RlTm9yKHNweVtpXS5uaWNrKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKCiAgICBwcmludGYoIiVz64uYOiAlZO2RnCIsIG5vclswXS5uaWNrLCBub3JbMF0udm90ZWQpOwogICAgZm9yKGludCBpPTEgO2k8Y250Tm9yO2krKyl7CiAgICAgIHByaW50ZigiLCAlc+uLmDogJWTtkZwiLCBub3JbaV0ubmljaywgbm9yW2ldLnZvdGVkKTsKICAgIH0KICAgIGZvcihpbnQgaT0wO2k8Y250U3B5O2krKyl7CiAgICAgIHByaW50ZigiLCAlc+uLmDogJWTtkZwiLCBzcHlbaV0ubmljaywgc3B5W2ldLnZvdGVkKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKCiAgICBpZih0YXJWb3RlZENudCAhPSAxKXsKICAgICAgcHJpbnRmKCLigLsg64+Z7ZGc6rCAIOuwnOyDne2VmOyXrCDsnbTrsogg7Yis7ZGc64qUIOustO2aqOuhnCDtlanri4jri6QuXG4iKTsKICAgIH0KICAgIGVsc2V7CiAgICAgIHByaW50Zigi4oC7IOuLpOyImOqysOuhnCAlc+uLmOydhCDsspjtmJXtlojsirXri4jri6QuXG4iLCB0YXJOaWNrKTsKCiAgICAgIGlmKHRhcklzU3B5ID09IHRydWUpewogICAgICAgIHByaW50Zigi4oC7ICVz64uY7J2AIOyKpO2MjOydtOyYgOyKteuLiOuLpC5cbiIsdGFyTmljayk7CiAgICAgICAgcHJpbnRmKCLigLsg7J2867CY6rWw7J2YIOyKueumrOuhnCDqsozsnoTsnbQg7KKF66OM65Cp64uI64ukLlxuIik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBmb3IoaW50IGkgPSB0YXJWb3RlZFBvczsgaTxjbnROb3I7IGkrKyl7CiAgICAgICAgICBub3JbaV0gPSBub3JbaSsxXTsKICAgICAgICB9CiAgICAgICAgY250Tm9yLS07CiAgICAgICAgbGVmdE5vci0tOwogICAgICAgIGlmKGxlZnROb3IgPD0gMCl7CiAgICAgICAgICBwcmludGYoIuKAuyDqs7zrsJjsnZgg7J2867CY6rWwKCVk66qFKeydhCDsspjtmJXtlojsirXri4jri6QuXG4iLCB0YXJOb3IpOwogICAgICAgICAgcHJpbnRmKCLigLsg7Iqk7YyM7J207J2YIOyKueumrOuhnCDqsozsnoTsnbQg7KKF66OM65Cp64uI64ukLlxuIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBwcmludGYoIlxuXG4iKTsKCiAgfQoKCiAgcmV0dXJuIDA7Cn0KCgo=
1번째 투표입니다.
happadai -> woosungchoi, woosungchoi -> snow-airline, gyeryak -> asbear, floridasnail -> happadai, soosoo -> floridasnail, asbear -> floridasnail, snow-airline -> woosungchoi, zzrococo -> woosungchoi, nand -> floridasnail
happadai님: 1표, woosungchoi님: 3표, gyeryak님: 0표, floridasnail님: 3표, soosoo님: 0표, asbear님: 1표, snow-airline님: 1표, zzrococo님: 0표, nand님: 0표
※ 동표가 발생하여 이번 투표는 무효로 합니다.
2번째 투표입니다.
happadai -> soosoo, woosungchoi -> gyeryak, gyeryak -> happadai, floridasnail -> woosungchoi, soosoo -> floridasnail, asbear -> gyeryak, snow-airline -> happadai, zzrococo -> gyeryak, nand -> happadai
happadai님: 3표, woosungchoi님: 1표, gyeryak님: 3표, floridasnail님: 1표, soosoo님: 1표, asbear님: 0표, snow-airline님: 0표, zzrococo님: 0표, nand님: 0표
※ 동표가 발생하여 이번 투표는 무효로 합니다.
3번째 투표입니다.
happadai -> gyeryak, woosungchoi -> snow-airline, gyeryak -> snow-airline, floridasnail -> nand, soosoo -> gyeryak, asbear -> happadai, snow-airline -> gyeryak, zzrococo -> floridasnail, nand -> floridasnail
happadai님: 1표, woosungchoi님: 0표, gyeryak님: 3표, floridasnail님: 2표, soosoo님: 0표, asbear님: 0표, snow-airline님: 2표, zzrococo님: 0표, nand님: 1표
※ 다수결로 gyeryak님을 처형했습니다.
4번째 투표입니다.
happadai -> snow-airline, woosungchoi -> zzrococo, floridasnail -> zzrococo, soosoo -> happadai, asbear -> woosungchoi, snow-airline -> happadai, zzrococo -> woosungchoi, nand -> woosungchoi
happadai님: 2표, woosungchoi님: 3표, floridasnail님: 0표, soosoo님: 0표, asbear님: 0표, snow-airline님: 1표, zzrococo님: 2표, nand님: 0표
※ 다수결로 woosungchoi님을 처형했습니다.
※ 과반의 일반군(2명)을 처형했습니다.
※ 스파이의 승리로 게임이 종료됩니다.