题目来源: 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

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

  1. 51nod 1087 1 10 100 1000【打表】

    题目来源: Ural 1209 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 1,10,100,1000...组成序列1101001000...,求 ...

  2. 51NOD 1087 1 10 100 1000

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 暴力大法 #include<bits/stdc++.h> ...

  3. 51Nod 1087 1 10 100 1000 | 数学

    Input示例 3 1 2 3 Output示例 1 1 0 #include "bits/stdc++.h" using namespace std; #define LL lo ...

  4. Ural 1209. 1, 10, 100, 1000... 一道有趣的题

    1209. 1, 10, 100, 1000... Time limit: 1.0 secondMemory limit: 64 MB Let's consider an infinite seque ...

  5. Timus - 1209 - 1, 10, 100, 1000...

    先上题目: 1209. 1, 10, 100, 1000... Time limit: 1.0 secondMemory limit: 64 MB Let's consider an infinite ...

  6. [51NOD1087]1 10 100 1000(规律,二分)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 用高中的数列知识就可以推出公式,不难发现f(n)=f(n ...

  7. 背水一战 Windows 10 (100) - 应用间通信: 分享

    [源码下载] 背水一战 Windows 10 (100) - 应用间通信: 分享 作者:webabcd 介绍背水一战 Windows 10 之 应用间通信 分享 示例1.本例用于演示如何开发一个分享的 ...

  8. 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序

    var iArray = []; function getRandom(istart, iend) { var iChoice = iend - istart + 1; //加1是为了取到100 va ...

  9. python 统计MySQL大于100万的表

    一.需求分析 线上的MySQL服务器,最近有很多慢查询.需要统计出行数大于100万的表,进行统一优化. 需要筛选出符合条件的表,统计到excel中,格式如下: 库名 表名 行数 db1 users 1 ...

随机推荐

  1. mysql 删除死锁的事务

    select * from information_schema.innodb_trxkill 953

  2. springmvc框架自带的异常处理器SimpleMappingExceptionResolver的使用

    使用分三步 1.定义异常类 2.在处理器中的用法 3.在springmvc配置文件中需要加配置

  3. jQuery学习之jQuery Ajax用法详解(转)

    jQuery Ajax在web应用开发中很常用,它主要包括有ajax,get,post,load,getscript等等这几种常用无刷新操作方法,下面我来给各位同学介绍介绍. 我们先从最简单的方法看起 ...

  4. spring mvc 多库连接

    最近弄了个spring mvc + hibernate4为框架的项目,其中需用到其他两个库的数据.具体如下: 1.将两库的application文件配置好,需注意的地方是两个事务控制是不一样的. 和 ...

  5. ubuntu 卡在登陆界面无法进入桌面,但是可以进入命令行界面

    ubuntu 卡在登陆界面无法进入桌面,但是可以进入命令行界面(初步断定是Xwindows界面软件出问题了,所以重装即可!)Solve: 1.Ctrl+Alt+F1进入命令行界面,root账户登陆2. ...

  6. mysql导出导入sql文件方法(linux)

    一.导入导出.sql文件for Linux: 1.从mysql中导出数据库test: 在终端运行:mysqldump -h localhost -u root -p test > /home/c ...

  7. Linux中bash编程

    bash编程也叫shell编程 预定义变量         $? 最后一次执行的命令的返回状态.如果这个变量的值为0,证明上一个命令正确的执行:如果这个变量返回的值非0(具体是那个数,有命令自己来决定 ...

  8. genymotion的安装

    1.安装virtualBox google的模拟器是运行在qemu上面的. genymotion这个模拟器运行在virtualBox上面.

  9. Mybatis之整体描述

    Mybatis在我看来最大的用处就是封装了jdbc,设置参数操作和获取解析结果集.同时控制了数据库链接等操作,大部分采用了反射来映射javabean对象来进行数据库操作. 1.接下来先整体介绍下主要的 ...

  10. [转]TCP的拥塞控制

    1.引言 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止 ...