题解 P1795 【无穷的序列_NOI导刊2010提高(05)】

· · 题解

这道题可以直接用数学方法做,每组循环的长度依次+1,所以第n个1前的长度为n(n-1)/2(等差数列求和),第n个1的位置为n(n-1)/2+1

附上代码:

#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        int x;//位置
        scanf("%d",&x);
        x--;//好算点
        if(int(sqrt(x*2))*int(sqrt(x*2)+1)==x*2) printf("1\n");//sqrt(n(n-1))位于n与n-1之间
        else printf("0\n");
    }
    return 0;
}