1087 1 10 100 1000(打表 set 数学)

1087 1 10 100 1000

题目来源: Ural 1209

基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题

 收藏

 关注

1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1。

Input

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)

Output

共T行,如果该位是0,输出0,如果该位是1,输出1。

Input示例

3
1
2
3

Output示例

1
1
0

刚开始想用打表的方法,但是没有写出来,后来看了别人代码,发现原来有数学规律,也有人用set来做

数学规律

其实是有规律的

1 = 1

2 = 1 + (1)

4 = 1 + (1+2)

7 = 1 + (1+2+3)

.....

即 X*(X-1)/2  + 1 == n有解

另t = (int)sqrt(2*n-2)  t*(t+1)==2*(n-1)成立时有解

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;

int main()
{
    int T;
    scanf("%d", &T);
    while (T--) {
        int n;
        scanf("%d", &n);
        int t = (int)sqrt(2*(n-1));
        if (t*(t+1) == 2*(n-1))
            printf("1\n");
        else
            printf("0\n");
    }

    return 0;
}

  

set

#include <bits/stdc++.h>
#define N 1000000000
using namespace std;
set<int> s;
int init(){
  s.insert(1);
  int ans=1;
  for(int i=1;ans+i<=1000000000;i++){
    s.insert(ans+i);
    ans+=i;
  }
}
int main(){
  int n;
  scanf("%d",&n);
  init();
  while(n--){
    int m;
    scanf("%d",&m);
    if(s.count(m))
      printf("1\n");
    else
      printf("0\n");
  }
  return 0;
}

  

打表  二分

#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;

const int maxn = 100100;
int One[maxn];

void preOne()
{
    int i = 1;
    One[0] = 1;
    while (i < maxn) {
        One[i] = One[i-1]+i;
        i++;
    }

}

bool Find(int x)
{
    int l = 0, r = maxn-1, mid;
    while (l <= r) {
        mid = (l+r)>>1;
        if (One[mid] > x)
            r = mid-1;
        else if (One[mid] < x)
            l = mid+1;
        else return true;
    }
    return false;
}

int main()
{
    //freopen("1.txt", "r", stdin);
    preOne();
    int T;
    scanf("%d", &T);
    while (T--) {
        int n;
        scanf("%d", &n);
        if (Find(n))
            printf("1\n");
        else
            printf("0\n");
    }

    return 0;
}

  

0

时间: 2024-10-12 19:50:19

1087 1 10 100 1000(打表 set 数学)的相关文章

51nod 1087 1 10 100 1000[打表]

题目来源: Ural 1209 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行1个数N.(1 <= N <= 10^9) Output 共T行,如果该位是0,输出0,如果该位是1,输出1. Input示例 3

1087 1 10 100 1000

1087 1 10 100 1000 题目来源: Ural 1209 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行1个数N.(1 <= N <= 10^9) Output 共T行,如果该位是0,输出0,如果该位

51nod 1087 1 10 100 1000(数学问题)

题目意思: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行1个数N.(1 <= N <= 10^9) Output 共T行,如果该位是0,输出0,如果该位是1,输出1. I

[2016-05-11][51nod][1087 1 10 100 1000]

时间:2016-05-11 14:03:56 星期三 题目编号:[2016-05-11][51nod][1087 1 10 100 1000] 题目大意:1,10,100,1000-组成序列1101001000-,求这个序列的第N位是0还是1. 分析:第(k+1)×k2+1=n(k+1)×k2+1=n的时候,n位置的数字为1 #include<stdio.h> #include<math.h> using namespace std; int main(){ int t; scan

[51nod] 1087 1 10 100 1000

1,10,100,1000...组成序列1101001000...,求这个序列的第N位是0还是1. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行1个数N.(1 <= N <= 10^9) Output 共T行,如果该位是0,输出0,如果该位是1,输出1. Input示例 3 1 2 3 Output示例 1 1 0 一开始的做法是先对1的位数进行打表,然后进行二分 #include <iostr

51Nod 1087 1 10 100 1000 | 数学

Input示例 3 1 2 3 Output示例 1 1 0 #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 510 #define MOD 10 using namespace std; int main() { int n,t,m; scanf("%d",&t)

马化腾:用户体验的10/100/1000法则

在研究用户需求上没有什么捷径可以走,不要以为自己可以想当然地猜测用户习惯 产品研发中心最容易犯的一个错误是:研发者往往对自己挖空心思创造出来的产品像对孩子一样珍惜,呵护,认为这是他的心血结晶.好的产品是有灵魂的,优美的设计.技术.运营都能体现背后的理念. 有时候开发者设计产品时总觉得越厉害越好,但好产品其实不需要所谓特别厉害的设计或者什么,因为觉得自己特别厉害的人就会故意搞一些体现自己厉害,但用户不需要的东西,那就是舍本逐末了. 腾讯也曾经在这上面走过弯路.现在很受好评的QQ邮箱,以前市场根本不

ural 1209. 1,10,100,1000.....

z 好像就是解这个方程: a[i]表示在序列中的位置,如果有正整数解,则是1,否则是0 变形的 1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 using namespace std; 5 6 const int N=65535; 7 long long a[N]; 8 9 int main(){ 10 long long n; 11 cin>>n; 12 for(int i=0;

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 扩展 iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html iptables限制syn速率 http://www.aminglinux.com/bbs/thre