青少年编程知识记录 codecoming

【题解】游戏

【题目描述】

上了半天的物理数学课,大家的脑子有点转不动了,下午的课表似乎看透了同学们的 心思,第一节就安排了体育课,CZ 中学的课表真是太有爱了,赞一个!午间休息后,文体 委员小 S 喊大家到教室外的走廊上排队,队形整好后小 S 带着大家走到了大操场上,体育 老师早就在那等着了,他先安排同学们做了五分钟的准备活动,接下来让大家玩一个有趣 的游戏,在这个游戏里,全班同学先散开站在操场上,同学们轮流玩这个游戏,从 1 号同学开始,然后是 2 号 3 号等等 (只要这个同学仍然参与这个游戏)。每次轮到玩的同学,就选择一个目前离他最近的同学,走过去拍他一下,然后回到原来的位置,那个被拍到的 同学就被排除在游戏之外了,必须立刻离开操场。当操场上只剩下一个同学时,游戏即告 结束,最后站在操场上的那个同学就是赢家。

R 老师 正和隔壁班的 F 主任津津有味地在场边看着同学们做游戏,为了添加一点乐 趣,R 老师就和 F 主任打赌哪个同学会赢?所以他想事先知道谁是赢家。R 老师希望你写 一个程序,读入同学们相互之间的距离,模拟出哪个同学最终会获胜。

【输入描述】

输入数据第一行为一个正整数 N, 表示在操场上玩游戏的人数,其中 1≤N≤1000, 接下来共有 N 行数据,每行有 N 个用空格隔开的整数,其中第 i 行第 j 列的数据表示操场 上编号为 i 的同学与编号为 j 的同学之间的距离。输入数据保证第 i 行第 i 列(主对角线 上的位置)的数据均为 0,其余数据均为正整数,且第 i 行第 j 列的数据一定等于第 j 行 第 i 列的数据,这意味着同学甲到同学乙的距离等于同学乙到同学甲的距离;操场上任意 两对同学之间的距离均不相同,也就是说上三角部分的正整数互不相同。

【输出描述】

输出数据仅有一行包含一个正整数表示获胜的同学的编号。



【样例输入】

4

0 1 6 3

1 0 4 5

6 4 0 2

3 5 2 0

【样例输出】

1

【样例解释】

1号同学先玩,走过去拍了离他最近的2号同学,2号同学被排除出游戏;接下去就直接轮到3号同学玩了,他走过去拍了4号同学,4号同学被排除出游戏;再次轮到1号同学时,他走过去拍了3号同学,3号同学被排除出游戏。最后1号同学获胜。

【数据范围】

30%的数据满足:n≤10

60%的数据满足:n≤100

100%的数据满足:n≤1000,所有数据不超过长整型范围





【参考代码】

#include<bits/stdc++.h>  using namespace std;  long long n,a[1055][1055];  bool f[10000];  int main(){      memset(f,true,sizeof(f));      cin>>n;      for(int i=1;i<=n;i++)      {          for(int j=1;j<=n;j++)          {              cin>>a[i][j];          }      }      long long p=0;      while(p<n-1)      {          for(int i=1;i<=n;i++)      {          if(f[i]==true)          {              long long s=INT_MAX/2,ss;              for(int j=1;j<=n;j++)              {                  if(a[i][j]<s&&f[j]==true&&i!=j)                  {                      s=a[i][j];                      ss=j;                  }              }              f[ss]=false;              p++;          }      }      }             for(int i=1;i<=n;i++)      {          if(f[i]==true)          {          cout<<i;              exit(0);           }                  }      return 0;  }



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:题解目录 浏览: