paulzhou的数学?TAT? 【二分打表找规律】
paulzhou的数学?TAT?
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 4
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
众所周知,paulzhou的数学不太好。现在他有一个问题,希望你帮他解答:
定义,求最小的正整数y使得,其中
Input
第一行输入一个整数T(T<=10),表示测试实例的数量;
每组用例输入一个非负整数n(n<10^100)
Output
对于每组用例,如果y<=5则输出y,否则输出“TAT”
Sample Input
2
233
233333333333333333333333333333333333333333333333333333333
Sample Output
3
TAT
Author
Anonymous
怎么说呢 ,这道题,一看就是找规律的,有临界值,所以要打表找到所有的临界值。还有一点,如果直接暴力找会累死,所以建议用二分找 ;
我找到的临界值
dp[1]=0;
dp[2]=1;
dp[4]=2;
dp[16]=3;
dp[256]=4;
dp[65536]=5;
dp[4294967296]=6; //发现了把,要暴力,机器要报废
// 好吧,没有必要非 用二分(当时光想着打表了,虽然也过了,但确实费力些功夫。朋友给我指点迷津),仔细想想就会发现,对于n==4的时候y==2,那么当y==3的时候,其实就是一个值开根号之后为4就对了所以这个时候n==16 ,依次类推。
打表找规律的代码 (全当多复习下这种的二分用法 Σ( ° △ °|||)︴)
#include<string.h>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<iostream>
#define LL long long
using namespace std;
/************************************/
const int MAXN = 1e6;
const double eps = 1e-8;
const int inf =0x3f3f3f3f;
int num;
void ss(LL n)
{if(n==1) return ;num++;ss(floor(sqrt(n)));// floor()是向下取整,ceil()是向上取整
}
int main()
{LL ans;LL l=1;LL r=1e18;ans=-1;LL mid;while(l<=r){mid=(l+r)>>1;num=0;ss(mid);if(num>=6) ans=mid,r=mid-1; // 将这个6不断更改找到临界值else l=mid+1;}printf("%lld\n",ans);return 0;
}
AC代码
不管用哪种方法找到的临界值,最后都是一样的。
#include<string.h>
#include<stdio.h>
#include<queue>
#include<iostream>
using namespace std;
/************************************/
int main()
{int t;scanf("%d",&t);getchar();while(t--){char s[1000];gets(s);int len =strlen(s);int answer;if(len==1){if(s[0]=='1') answer=0;if(s[0]>='2'&&s[0]<'4') answer=1;if(s[0]>='4') answer=2;} else if(len==2){if(strcmp(s,"16")<0) answer=2;else answer=3;}else if(len==3){if(strcmp(s,"256")<0) answer=3;else answer=4;}else if(len>3&&len<5) answer=4;else if(len==5){if(strcmp(s,"65536")<0) answer=4;else answer=5;}else if(len>5 &&len <10 ) answer=5;else if(len==10){if(strcmp(s,"4294967296")<0) answer=5;else answer=6;}else answer=6;if(answer<6) printf("%d\n",answer);else puts("TAT");}return 0;
}
paulzhou的数学?TAT? 【二分打表找规律】相关推荐
- LeetCode-878. 第 N 个神奇数字【数学,二分查找,找规律】
LeetCode-878. 第 N 个神奇数字[数学,二分查找,找规律] 题目描述: 解题思路一:二分答案+容斥原理.给定一个上下界,然后依次增大下界或者减小上界,直到只剩一个答案.容斥原理是,加上两 ...
- D. Pythagorean Triples(1487D)(打表找规律 + 二分)
D. Pythagorean Triples(1487D)(打表找规律 + 二分) 题目来源:D. Pythagorean Triples 题意: 给定一个 n,求满足以下条件的数对 (a, b, c ...
- [国家集训队]整数的lqp拆分 数学推导 打表找规律
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在: 求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐 ...
- 点分治问题 ----------- P3727 曼哈顿计划E[点分治+博弈SG函数打表找规律]
题目链接 解题思路: 1.首先对于每个操作我们实际上是一个博弈问题 对于k=1的操作就是很基础的NIM游戏就是找到一条链的异或和为0 对于k=2的操作通过达打表找规律: 如果s是奇数那么偶数的SG函数 ...
- Yet Another Meme Problem(打表找规律)
Try guessing the statement from this picture http://tiny.cc/ogyoiz. You are given two integers AA an ...
- hdu_5894_hannnnah_j’s Biological Test(打表找规律)
题目链接:hdu_5894_hannnnah_j's Biological Test 题意: 有n个不同的位置围成一个圈,现在要安排m个人坐,每个人至少的间隔为k,问有多少种安排 题解: 先打表找规律 ...
- Ural 2045. Richness of words 打表找规律
2045. Richness of words 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=2045 Description For ...
- Ural 2037. Richness of binary words 打表找规律 构造
2037. Richness of binary words 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=2037 Descripti ...
- [codeforces 1327E] Count The Blocks 打表找规律+根据规律找公式+优化公式
Educational Codeforces Round 84 (Rated for Div. 2) 比赛人数13522 [codeforces 1327E] Count The Blocks ...
最新文章
- BCH链上交易量剧增,超越莱特币
- thinkphp学习笔记10—看不懂的路由规则
- 基于android os 5.1,Android 5.1.1版氢OS快速体验
- Create new SAP DDL view and click finish in wizard
- Hawtio和Jolokia的休眠统计
- xpath helper小工具的安装
- 在服务器上导出dmp文件,远程在服务器上导出dmp文件
- php echo substr('hello',1,-2);-2是什么意思 为什么结果是 el
- 多线程编程核心技术日记
- 阿里云存储:安防行业背后的赋能者 | 凌云时刻
- PHP自动加载(上)——spl_autoload_register
- Linux 更新 CPU microcode
- 云计算机盒子,网络盒子秒变PC电脑必备装备客厅云电脑
- 含根式的定积分计算_定积分计算详细步骤
- 启舰:不懂花钱的人,大概率成为Loser!
- PyQt5 密码输入框
- Java强、软、弱、虚四大引用(附代码示例)
- mysql数据库修改密码的几种方法(用命令修改)
- 数据结构和算法(五)--栈(Stack)
- 【已解决】Error: ENOENT: no such file or directory, open ‘F:\xxx\node_modules\echarts