| 
            
            
             
              #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; }             
                       |