UVa 12505 Searching in sqrt(n)
一开始在vjudge上看到这题时,标的来源是CSU 1120,第八届湖南省赛D题“平方根大搜索”。今天交题时CSU突然跪了,后来查了一下看哪家OJ还挂了这道题,竟然发现这题是出自UVA的,而且用的原题。
Description
time limit 5s
In binary, the square root of 2, denoted by sqrt(2), is an infinite number 1.0110101000001001111... Given an integer n and a binary string (i.e. a string consisting of 0 and 1) S, your task is to find the first occurrence of S in the fraction part (i.e. the part after the decimal point) of sqrt(n). In case sqrt(n) is an integer, the fraction part is an infinite sequence of zeros.
Input
The first line contains T (T ≤ 100), the number of test cases. Each of the following lines contains an integer n (2 ≤ n ≤ 1, 000, 000) and a binary string S with at most 20 characters.
Output
For each case, print the position of the first character in the first occurrence of S. The first digit after the dot is at position 0. The answer is guaranteed to be no greater than 100.
Sample Input
2
2 101
1202 110011
Sample Output
2
58
Solution
高精度
复杂度 $O(n^3)$
#include <bits/stdc++.h>
using namespace std;
const int N(), M();
int get_len(int n){
if(!n) return ;
int res=;
for(;n;res++,n>>=);
return res;
}
void trans(int n, int *bit, int &len){
int l=get_len(n);
for(int i=len+l-; i>=len; i--){
bit[i]=n&, n>>=;
}
len+=l;
}
int tmp[N], a[N], b[N], len, _len, LEN;
void sqr(){ //error-prone
memset(tmp, , sizeof(tmp));
for(int i=; i<len; i++) for(int j=; j<len; j++) tmp[i+j]+=a[i]*a[j];
for(int i=*len-; i; i--){
tmp[i-]+=tmp[i]/;
tmp[i]%=;
}
trans(tmp[], b, LEN=);
for(int i=; i<=*len-; i++) b[LEN++]=tmp[i];
}
int get_int(){
int res=, l=LEN-*_len;
for(int i=l-, _pow=; i>=; res+=b[i]*_pow, i--, _pow<<=); //error-prone
return res;
}
int solve(){
int n; string s, t; cin>>n>>t;
int m=sqrt(n);
if(m*m==n) return ;
len=_len=;
trans(m, a, len);
int tmp=len;
while(_len<M){
a[len++]=, _len++;
sqr();
if(get_int()>=n) a[len-]=;
}
for(int i=tmp; i<len; i++) s+='0'+a[i];
return s.find(t);
}
int main(){
//freopen("in", "r", stdin);
int T;
for(cin>>T; T--; cout<<solve()<<endl);
}
有意写得短一些,但还是有50行,太长了都不想看~
总结
总结一下高精度度乘法的写法,虽说也没什么可总结的。
无论二进制还是十进制,写法都一样,以下代码结合题目按二进制写。
1. 大整数的存法:int[]数组,左边高位(左高右低即书写格式,这样处理有一定优越性(真的有优越性吗?)),0-indexed
2. 将长为n的大整数的a[]和长为m的大整数的b[]相乘
先按如下方式将长为n+m-1中间结果存在数组tmp[]中
memset(tmp, , sizeof(tmp));
for(int i=; i<n; i++)
for(int j=; j<m; j++)
tmp[i+j]+=a[i]*b[j];
再处理出最终结果存到数组c[]中
for(int k=i+j-; k; k--)
tmp[k-]+=tmp[k]/, tmp[k]%=; int get_len(int n){
if(!n) return ;
int res=;
for(; n; res++, n>>=);
return res;
} len=get_len(tmp[]);
for(int i=len-; i>=; i--)
c[i]=tmp[]%, tmp[]/=; for(int k=; k<i+j-; k++)
c[len++]=tmp[k];
UVa 12505 Searching in sqrt(n)的更多相关文章
- 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D D - 平方根大搜索 UVA12505 - Searchin ...
- STL --- UVA 123 Searching Quickly
UVA - 123 Searching Quickly Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.acti ...
- uva 123 Searching Quickly
Searching Quickly Background Searching and sorting are part of the theory and practice of computer ...
- uva 1597 Searching the Web
The word "search engine" may not be strange to you. Generally speaking, a search engine se ...
- Lucas定理初探
1.1 问题引入 已知\(p\)是一质数,求\(\dbinom{n}{m}\pmod{p}\). 关于组合数,它和排列数都是组合数学中的重要概念.这里会张贴有关这两个数的部分内容. 由于Lucas定理 ...
- 基于STL的字典生成模块-模拟搜索引擎算法的尝试
该课题来源于UVA中Searching the Web的题目:https://vjudge.net/problem/UVA-1597 按照题目的说法,我对按照特定格式输入的文章中的词语合成字典,以满足 ...
- Volume 1. Sorting/Searching(uva)
340 - Master-Mind Hints /*读了老半天才把题读懂,读懂了题输出格式没注意,结果re了两次. 题意:先给一串数字S,然后每次给出对应相同数目的的一串数字Si,然后优先统计Si和S ...
- Searching the Web UVA - 1597
The word "search engine" may not be strange to you. Generally speaking, a search engine ...
- 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第五章 3(Sorting/Searching)
第一题:340 - Master-Mind Hints UVA:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...
随机推荐
- WebApi 返回小驼峰式 json 格式,并格式化日期
from:http://blog.csdn.net/magiccops/article/details/42969363 屏蔽默认返回xml格式:Global文件加:GlobalConfigurati ...
- 运维工作中常用到的几个rsync同步命令
作为一个运维工程师,经常可能会面对几十台.几百台甚至上千台服务器,除了批量操作外,环境同步.数据同步也是必不可少的技能.说到“同步”,不得不提的利器就是rsync. 下面结合本人近几年运维工作中对这一 ...
- 检查c# 内存泄漏
c# 内存泄漏检查心得 系统环境 windows 7 x64 检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0 开发的软件为winform ...
- The ServiceClass object does not implement the required method in the following form: OMElement sayHello(OMElement e)
今天遇到一件诡异的事情,打好的同一个aar包,丢到测试环境tomcat,使用soapui测试,正常反馈结果. 丢到本地tomcat,使用soapui测试,始终报以下错误. <soapenv:En ...
- XML CDATA的作用
操作XML文件时,如果允许用户输入内容,例如∶"< ".">"."/".""等,当生成XML时,会破坏了XM ...
- iBATIS.net获取运行时sql语句
[本文原创,第一次离首页如此之近.发在候选区攒攒rp,管理员看着不合适可以撤下.] 虽然只在iBatis的世界里小打小闹匆匆数月,却历经数次与领导和同事激辩,再通过不懈努力学习和开发积累,楼猪终于被它 ...
- Log4Net写入到数据库配置过程中的一些小问题备忘
问题1: 在公司进行log4net写入服务器配置的时候,一切正常,但是在家里的机器上,就频繁出现这个问题: SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误 ...
- JS调用Silverlight方法拾遗
在最近做的物联网项目中,需要利用封装过的Silverlight刻度控件显示温度,湿度,二氧化碳浓度等值.由于最新的数据是通过js ajax获取的,所以需要把这些数据传递给silverlight显示,这 ...
- activiti-explorer:使用mysql导入外部bpmn文件后存在乱码的问题
我已经采取了如下步骤,但是仍然还是乱码 1. 在mysql中创建数据库时指定使用utf8编码: CREATE DATABASE Activiti DEFAULT CHARACTER SET utf8 ...
- initializer for conditional binding must have optional type not AVAudioPlayer
if let buttonBeep = self.setupAudioPlayerWithFile("ButtonTap", type: "wav") { ...