| 
              #include <stdio.h>#include <stdlib.h>
 
 typedef struct _ANT
 {
 int pos;
 int flags;
 } ANT;
 
 #define AF_ILL 1
 #define AF_OUT 2
 
 // 判断蚂蚁i是否与另一只蚂蚁相遇
 // n为蚂蚁总数
 // 返回值: 相遇的另一只蚂蚁的序号
 // 如果没有相遇的蚂蚁, 返回-1
 int meet(ANT *ants, int n, int i)
 {
 int j;
 for (j = 0; j < n; j++)
 {
 if (j == i || (ants[j].flags & AF_OUT))
 continue;
 if (abs(ants[j].pos) == abs(ants[i].pos))
 return j;
 }
 return -1;
 }
 
 void meetcheck(ANT *ants, int n, int i, int *pIll)
 {
 int a = meet(ants, n, i);
 if (a == -1)
 return;
 
 ants[i].pos--;
 ants[a].pos--;
 ants[i].pos = -ants[i].pos;
 ants[a].pos = -ants[a].pos;
 
 // 感冒判定
 if ((ants[i].flags & AF_ILL) && !(ants[a].flags & AF_ILL))
 {
 ants[a].flags |= AF_ILL;
 (*pIll)++;
 }
 if ((ants[a].flags & AF_ILL) && !(ants[i].flags & AF_ILL))
 {
 ants[i].flags |= AF_ILL;
 (*pIll)++;
 }
 }
 
 // 返回值: out的增加值
 int walk(ANT *ants, int n, int i, int *pIll)
 {
 if (ants[i].flags & AF_OUT)
 return 0;
 
 ants[i].pos++;
 meetcheck(ants, n, i, pIll);
 if (ants[i].pos == 0 || abs(ants[i].pos) >= 100)
 {
 ants[i].flags |= AF_OUT;
 return 1;
 }
 return 0;
 }
 
 int main()
 {
 int n, i;
 int ill = 1;
 int out = 0;
 ANT *ants;
 scanf_s("%d", &n);
 ants = (ANT *)malloc(n * sizeof(ANT));
 for (i = 0; i < n; i++)
 {
 scanf_s("%d", &ants[i].pos);
 if (i == 0)
 ants[i].flags = AF_ILL;
 else
 ants[i].flags = 0;
 }
 
 while (out < n)
 {
 for (i = 0; i < n; i++)
 out += walk(ants, n, i, &ill);
 }
 
 printf("%d\n", ill);
 
 free(ants);
 return 0;
 }
 |