#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 128
struct marble {
long count;
struct marble *next;
struct marble *prev;
} *anchor, *current, *t1, *t2, *t3;
int main(void) {
current
=malloc(sizeof(struct marble
)); current->next = current->prev = current;
current->count=0L;
anchor = current;
char line[LEN];
long maxplayers = 9;
long maxpoints = 30;
// fgets(line,LEN,stdin);
// sscanf(line,"%ld players; last marble is worth %ld points", &maxplayers, &maxpoints);
long player[maxplayers];
memset(player
,0L,sizeof(player
));
long currentmarble=1L;
long toppoint=0L;
long currentplayer=0L;
while(toppoint<maxpoints)
{
/* t1=anchor;
printf("[%ld] ",currentplayer+1);
while(t1->next != anchor)
{
printf("%ld ", t1->count);
t1 = t1->next;
}
printf("%ld ", t1->count);
printf("\n");
*/
if(currentmarble && currentmarble%23==0)
{
player[currentplayer] += currentmarble++;
t2=current;
for(int i=0;i<7;i++)
t2 = t2->prev;
player[currentplayer] += t2->count;
printf("%ld\n",currentmarble
);
t1 = t2->prev;
t3 = t2->next;
t1->next = t3;
t3->prev = t1;
current = t3;
} else {
t2
= malloc(sizeof(struct marble
)); t1 = current->next;
t3 = t1->next;
t2->next = t3;
t2->prev = t1;
t1->next = t2;
t3->prev = t2;
current = t2;
current->count = currentmarble++;
}
if(toppoint<player[currentplayer])
toppoint=player[currentplayer];
currentplayer++;
currentplayer%=maxplayers;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2RlZmluZSBMRU4gMTI4CgpzdHJ1Y3QgbWFyYmxlIHsKCWxvbmcgY291bnQ7CglzdHJ1Y3QgbWFyYmxlICpuZXh0OwoJc3RydWN0IG1hcmJsZSAqcHJldjsKfSAqYW5jaG9yLCAqY3VycmVudCwgKnQxLCAqdDIsICp0MzsKCmludCBtYWluKHZvaWQpIHsKCWN1cnJlbnQ9bWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFyYmxlKSk7CgljdXJyZW50LT5uZXh0ID0gY3VycmVudC0+cHJldiA9IGN1cnJlbnQ7CgljdXJyZW50LT5jb3VudD0wTDsKCWFuY2hvciA9IGN1cnJlbnQ7CgljaGFyIGxpbmVbTEVOXTsKCWxvbmcgbWF4cGxheWVycyA9IDk7Cglsb25nIG1heHBvaW50cyA9IDMwOwovLwlmZ2V0cyhsaW5lLExFTixzdGRpbik7Ci8vCXNzY2FuZihsaW5lLCIlbGQgcGxheWVyczsgbGFzdCBtYXJibGUgaXMgd29ydGggJWxkIHBvaW50cyIsICZtYXhwbGF5ZXJzLCAmbWF4cG9pbnRzKTsKCglsb25nIHBsYXllclttYXhwbGF5ZXJzXTsKCW1lbXNldChwbGF5ZXIsMEwsc2l6ZW9mKHBsYXllcikpOwoJCglsb25nIGN1cnJlbnRtYXJibGU9MUw7Cglsb25nIHRvcHBvaW50PTBMOwoJbG9uZyBjdXJyZW50cGxheWVyPTBMOwoJCgl3aGlsZSh0b3Bwb2ludDxtYXhwb2ludHMpCgl7Ci8qCQl0MT1hbmNob3I7CgkJcHJpbnRmKCJbJWxkXSAgIixjdXJyZW50cGxheWVyKzEpOwoJCQoJCXdoaWxlKHQxLT5uZXh0ICE9IGFuY2hvcikKCQl7CgkJCXByaW50ZigiJWxkICIsIHQxLT5jb3VudCk7CgkJCXQxID0gdDEtPm5leHQ7CgkJfQoJCXByaW50ZigiJWxkICIsIHQxLT5jb3VudCk7CgkJcHJpbnRmKCJcbiIpOwoqLwoJCQoJCWlmKGN1cnJlbnRtYXJibGUgJiYgY3VycmVudG1hcmJsZSUyMz09MCkKCQl7CgkJCXBsYXllcltjdXJyZW50cGxheWVyXSArPSBjdXJyZW50bWFyYmxlKys7CgkJCXQyPWN1cnJlbnQ7CgkJCWZvcihpbnQgaT0wO2k8NztpKyspCgkJCQl0MiA9IHQyLT5wcmV2OwoJCQkJCgkJCXBsYXllcltjdXJyZW50cGxheWVyXSArPSB0Mi0+Y291bnQ7CnByaW50ZigiJWxkXG4iLGN1cnJlbnRtYXJibGUpOwoJCQkKCQkJdDEgPSB0Mi0+cHJldjsKCQkJdDMgPSB0Mi0+bmV4dDsKCQkJCgkJCXQxLT5uZXh0ID0gdDM7CgkJCXQzLT5wcmV2ID0gdDE7CgkJCQoJCQljdXJyZW50ID0gdDM7CgkJCQoJCQlmcmVlKHQyKTsKCQkJCgkJfSBlbHNlIHsKCQkJdDIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXJibGUpKTsKCQkJdDEgPSBjdXJyZW50LT5uZXh0OwoJCQl0MyA9IHQxLT5uZXh0OwoJCQkKCQkJdDItPm5leHQgPSB0MzsKCQkJdDItPnByZXYgPSB0MTsKCQkJCgkJCXQxLT5uZXh0ID0gdDI7CgkJCXQzLT5wcmV2ID0gdDI7CgkJCQoJCQljdXJyZW50ID0gdDI7CgkJCWN1cnJlbnQtPmNvdW50ID0gY3VycmVudG1hcmJsZSsrOwoJCX0KCQkKCQlpZih0b3Bwb2ludDxwbGF5ZXJbY3VycmVudHBsYXllcl0pCgkJCXRvcHBvaW50PXBsYXllcltjdXJyZW50cGxheWVyXTsKCQkKCQljdXJyZW50cGxheWVyKys7CgkJY3VycmVudHBsYXllciU9bWF4cGxheWVyczsKCQkKCQkKCX0KCQoJcHJpbnRmKCIlbGRcbiIsdG9wcG9pbnQpOwoJCglyZXR1cm4gMDsKfQo=