URAL - 1153 Supercomputer 大数开方
题意:给定m,m = n * (n+1) / 2,计算n值。
思路:n = SQRT(m*2)
注意m很大,需要自己实现大数开方。我用的是自己写的大数模板:大数模板
AC代码
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 1e4 + 5;
struct BigInteger {
vector<int>s; //12345--54321
void DealZero() { //处理前导0
for(int i = s.size() - 1; i > 0; --i){
if(s[i] == 0) s.pop_back();
else break;
}
}
BigInteger operator = (long long num) { // 赋值运算符
s.clear();
vector<int>tmp;
do{
s.push_back(num % 10);
num /= 10;
}while(num);
return *this;
}
BigInteger operator = (const string& str) { // 赋值运算符
s.clear();
for(int i = str.size() - 1; i >= 0; --i) s.push_back(str[i] - '0');
this->DealZero();
return *this;
}
BigInteger operator = (const char *a) {
int n = strlen(a);
}
BigInteger operator + (const BigInteger& b) const {
BigInteger c;
c.s.clear();
int len1 = s.size(), len2 = b.s.size();
for(int i = 0, g = 0; g > 0 || i < len1 || i < len2; ++i) {
int x = g;
if(i < len1) x += s[i];
if(i < len2) x += b.s[i];
c.s.push_back(x % 10);
g = x / 10;
}
return c;
}
//大数减小数
BigInteger operator - (const BigInteger& b) const {
BigInteger c;
c.s.clear();
int len1 = s.size(), len2 = b.s.size();
for(int i = 0, g = 0; i < len1 || i < len2; ++i) {
int x = g;
if(i < len1) x += s[i];
g = 0;
if(i < len2) x -= b.s[i];
if(x < 0) {
g = -1; //借位
x += 10;
}
c.s.push_back(x);
}
c.DealZero();
return c;
}
BigInteger operator * (const BigInteger& b) const {
BigInteger c, tmp;
c.s.clear();
int len1 = s.size(), len2 = b.s.size();
for(int i = 0; i < len1; ++i) {
tmp.s.clear();tmp;
int num = i;
while(num--) tmp.s.push_back(0);
int g = 0;
for(int j = 0; j < len2; ++j) {
int x = s[i] * b.s[j] + g;
tmp.s.push_back(x % 10);
g = x / 10;
}
if(g > 0) tmp.s.push_back(g);
c = c + tmp;
}
c.DealZero();
return c;
}
//单精度除法
BigInteger operator / (const int b) const {
BigInteger c, tmp;
c.s.clear();
int len = s.size();
int div = 0;
for(int i = len - 1; i >= 0; --i) {
div = div * 10 + s[i];
while(div < b && i > 0) {
div = div * 10 + s[--i];
}
tmp.s.push_back(div / b);
div %= b;
}
for(int i = tmp.s.size() - 1; i >= 0; --i) c.s.push_back(tmp.s[i]);
c.DealZero();
return c;
}
bool operator < (const BigInteger& b) const {
int len1 = s.size(), len2 = b.s.size();
if(len1 != len2) return len1 < len2;
for(int i = len1 - 1; i >= 0; --i) {
if(s[i] != b.s[i]) return s[i] < b.s[i];
}
return false; //相等
}
bool operator <= (const BigInteger& b) const {
return !(b < *this);
}
string ToStr() {
string ans;
ans.clear();
for(int i = s.size()-1; i >= 0; --i)
ans.push_back(s[i] + '0');
return ans;
}
//大数开方
/**大数开方用法说明:
字符串必须从第二个位置开始输入,且s[0] = '0'
scanf("%s", s+1);
*/
BigInteger SQRT(char *s) {
string p = "";
s[0]='0';
if(strlen(s)%2 == 1)
work(p, 2, s+1, 0);
else
work(p, 2, s, 0);
BigInteger c;
c.s.clear();
c = p;
return c;
}
//开方准备
//------------------------------------
int l;
int work(string &p, int o,char *O,int I){
char c, *D=O ;
if(o>0)
{
for(l=0;D[l];D[l++]-=10)
{
D[l++]-=120;
D[l]-=110;
while(!work(p, 0, O, l))
D[l]+=20;
p += (char)((D[l]+1032)/20);
}
}
else
{
c=o+(D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;
D[I]+=I<0 ? 0 : !(o=work(p, c/10,O,I-1))*((c+999)%10-(D[I]+92)%10);
}
return o;
}
//-----------------------------------------
};
ostream& operator << (ostream &out, const BigInteger& x) {
for(int i = x.s.size() - 1; i >= 0; --i)
out << x.s[i];
return out;
}
istream& operator >> (istream &in, BigInteger& x) {
string s;
if(!(in >> s)) return in;
x = s;
return in;
}
int main() {
BigInteger a, tmp;
tmp = 2;
string str;
char s[maxn];
while(cin >> str) {
a = str;
a = tmp * a;
int cur = 1;
for(int i = a.s.size()-1; i >= 0; --i) {
s[cur++] = a.s[i] + '0';
}
cout << a.SQRT(s) << "\n";
}
return 0;
}
如有不当之处欢迎指出!
URAL - 1153 Supercomputer 大数开方的更多相关文章
- ural 1153. Supercomputer
1153. Supercomputer Time limit: 2.0 secondMemory limit: 64 MB To check the speed of JCN Corporation ...
- Java中利用BigInteger类进行大数开方
在Java中有时会用到大数据,基本数据类型的存储范围已经不能满足要求了,如要对10的1000次方的这样一个数据规模的数进行开方运算,很明显不能直接用Math.sqrt()来进行计算,因为已经溢出了. ...
- ACM-ICPC2018焦作网络赛 Participate in E-sports(大数开方)
Participate in E-sports 11.44% 1000ms 65536K Jessie and Justin want to participate in e-sports. E- ...
- 蓝桥杯T126(xjb&大数开方)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T126 题意:中文题诶- 思路:显然被翻转了奇数次的硬币为反面朝上,但是本题的数据量很大,所以O(n^2)枚举 ...
- JAVA 大数开方模板
JAVA 大数开方模板 import java.math.BigInteger; import java.math.*; import java.math.BigInteger; import jav ...
- 大数开方 ACM-ICPC 2018 焦作赛区网络预赛 J. Participate in E-sports
Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...
- ACM-ICPC 2018 焦作赛区网络预赛 J Participate in E-sports(大数开方)
https://nanti.jisuanke.com/t/31719 题意 让你分别判断n或(n-1)*n/2是否是完全平方数 分析 二分高精度开根裸题呀.经典题:bzoj1213 用java套个板子 ...
- Very simple problem - SGU 111(大数开方)
分析:使用的是构造新数字法进行不断构造,然后逼近每一位数字,然后使用c++徒手敲了240多行代码,竟然过了........................很有成就感. 代码如下: ========== ...
- 大数模板(Java)
大数加法 /* 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数) Output 输出A + B ...
随机推荐
- python_如何对迭代器进行切片操作
案例: 对于某个文件,我只想读取到其中100~200行之间的内容,是否可以通过切片的方式进行读取? 我想: f = open() f[100:200] 可行? 如何解决这个问题? 方法1: 全部读取到 ...
- 【转】sed命令n,N,d,D,p,P,h,H,g,G,x解析
1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...
- redis数据类型-有序集合
有序集合类型 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们不仅可以完成插入.删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素.获得指 ...
- Java NIO 之 Socket Channel
在Java NIO中用Channel来对程序与进行I/O操作主体的连接关系进行抽象,这些IO主体包括如文件.Socket或其他设备.简而言之,指代了一种与IO操作对象间的连接关系. 按照Channel ...
- Java基础系列--Executor框架(一)
文章来源:http://www.cnblogs.com/V1haoge/p/8393618.html 一.Executor框架介绍 Executor框架是JDK1.5之后出现的,位于juc包中,是并发 ...
- 高通ASOC中的machine驱动
ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...
- CentOS6.9编译安装nginx1.4.7
1.系统安装开发包组和zlib-devel,关闭iptables [root@bogon ~]# yum groupinstall -y "Development Tools" [ ...
- 玩转spring boot——简单登录认证
前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...
- Python基础篇(一)
首先需要从Python的官网下载python的安装程序,下载地址为:www.python.org/downloads.最新的版本为3.4.1,下载和操作系统匹配的安装程序并安装即可. 安装好了后,在开 ...
- open-falcon-agent插件使用
说明 Plugin可以看做是对agent功能的扩充.使用插件可以对采集脚本进行统一管理,方便定制修改,也可以免去在crontab中添加计划任务. 开启plugin功能 # 修改agent配置文件 &q ...