HDU3067 小t的游戏

Description

n个数,每次每堆取一个,生成一个新的,然后把0的拿掉,问会不会有循环节,循环节是多少?

Algorithm

可以找规律,但是我没找,直接百度了。
我找了蛮久都没找到数学证明的。
算了。
本来这种自己不是100%会的题我是不想写题解的。
权当保存一下代码好了

Hint

顺便一提,这个必须要用scanf,用cin就是超时,搞了我TLE了几次,虽然我也不在乎这些东西,正式比赛的时候肯定是全部scanf的,不能坑队友,平时就哪个字打的少用哪个

Code

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
  int n;
  while (scanf("%d", &n) != EOF)
  {
    int s = 0;
    for (int i = 0; i < n; i++)
    {
      int x;
      scanf("%d", &x);
      s += x;
    }
    int ans;
    for (int i = 1; ; i++)
    {
      if (i * (i + 1) / 2 == s)
      {
        ans = 1;
        break;
      }
      if (i * (i + 1) / 2 > s)
      {
        ans = i;
        break;
      }
    }
    printf("yes\n%d\n", ans);
  }
}

你可能感兴趣的:(HDU3067 小t的游戏)