码迷,mamicode.com
首页 > 其他好文 > 详细

Ural1209(数学推导)

时间:2015-03-04 21:10:02      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:数学

题目链接:点击打开链接


解题思路:

此题甚好。推导公式,首先观察序列110100100010000·····,我们把为1的下标单独拿出来看。依次为1、2、4 、7、 11·····,可以分解为1+(0) 、1+(0+1)、1+(0+1+2)、1+(0+1+2+3)、1+(0+1+2+3+4),可以推导出规律1 + x * (x - 1) / 2。

那么对于每个n,我们只要判断是否存在x使n == 1 + x * (x - 1) / 2即可。对于最后判断开根号是否为整数的判断方法,我们可以用temp - (int)temp == 0来判断,此法甚妙!


完整代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <climits>
#include <cstdio>
#include <string>
#include <cmath>
#include <map>
#include <queue>
using namespace std;
typedef long long LL;
const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
const double PI = acos(-1.0); //M_PI;
const int maxn = 700001;
int ans[maxn];
int main()
{
    #ifdef DoubleQ
    freopen("in.txt","r",stdin);
    #endif
    int T;
    cin >> T;
    LL n;
    int cnt = 0;
    for(int i = 0 ; i < T ; i ++)
    {
        cin >> n;
        double temp = sqrt(1 + 8 * (n - 1));
        if(temp - (int)temp == 0)
            ans[cnt++] = 1;
        else
            ans[cnt++] = 0;
    }
    for(int i = 0 ; i < cnt ; i ++)
        printf("%d%s" , ans[i] , i == cnt - 1 ? "\n" : " ");
}


更多精彩请访问:点击打开链接

Ural1209(数学推导)

标签:数学

原文地址:http://blog.csdn.net/u013447865/article/details/44064605

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!