NKOJ P5676 SuperGCD【超级GCD】

news2025/2/26 6:25:53

为什么NKOJ的题交JAVA会被keyword卡System,还不能用python水高精度……

题目分析

回归正题,由于本题数据范围 0 ≤ A , B ≤ 1 0 10000 0 \le A,B \le 10^{10000} 0A,B1010000两个 10000 10000 10000位的整数算GCD,所以用高精度欧几里得GCD的话会使得算法时间复杂度不够优秀(虽然各位Dalao都会卡常过题,但本蒟蒻还是希望给大家带来较好的算法)

这里为了可以更有惊无险的AC本题,我采用了辗转相除Pro优化法,其内容如下:(可能是环境不一样,在另外一边看起来很好看,粘过来难看死了)
g c d ( a , b ) = { a     [ a = b ]                                       g c d ( b , a )     [ a < b ]                           g c d ( a , b 2 )     [ a 奇数 b 偶数 ]             g c d ( a 2 , b )     [ a 偶数 b 奇数 ]             g c d ( a 2 , b 2 ) × 2     [ a , b 均为偶数 ]     g c d ( a − b , b ) ;     [ a , b 均为奇数 ]      \mathrm{gcd}(a,b)= \left\{\begin{matrix} a \ \ \ [a=b]\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \mathrm{gcd}(b,a)\ \ \ [a<b]\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \mathrm{gcd}(a,\frac{b}{2})\ \ \ [a奇数b偶数]\ \ \ \ \ \ \ \ \ \ \ \\ \mathrm{gcd}(\frac{a}{2},b)\ \ \ [a偶数b奇数]\ \ \ \ \ \ \ \ \ \ \ \\ \mathrm{gcd}(\frac{a}{2},\frac{b}{2}) \times 2\ \ \ [a,b均为偶数]\ \ \ \\ \mathrm{gcd}(a-b,b);\ \ \ [a,b均为奇数]\ \ \ \ \end{matrix}\right. gcd(a,b)= a   [a=b]                                     gcd(b,a)   [a<b]                         gcd(a,2b)   [a奇数b偶数]           gcd(2a,b)   [a偶数b奇数]           gcd(2a,2b)×2   [a,b均为偶数]   gcd(ab,b);   [a,b均为奇数]    

但是很明显,我们的代码并不能用函数实现,这样就会MLE掉(函数递归的本质是压栈,当调用次数过多栈会原地爆炸),所以我们需要把这个转化为循环,在循环中又两个变量(高精度数)a,b,分别记录当前的两个数a,b,当找到a==b时,就直接break输出a的值;

注意,本体难点在于实现:高精需压位,输出需补0,若是忘了写,WA两行泪;(我的WA40pts就是没有补0造成的,TLE70pts就是用了递归+没有压位)

听着是不是很简单,当你实现的时候就知道什么叫坐牢了
列表
注意以下代码不知道为什么只过得了NKOJ的测试点,LUOGU和POJ的OIER们请移步其他文章或自己尝试去写;

AC-NKOJ Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> a,b;
int kkk=1;
int cmp(vector<int> x,vector<int> y){
    if(x.size()!=y.size()){
		if(x.size()>y.size()){return 1;}
		else{return 0;}
	}
    for(int i=x.size()-1;i>=0;i--){
        if(x[i]!=y[i]){
			if(x[i]>y[i]){return 1;}
			else{return 0;} 
		}
    }
    return 3;
}
vector<int> sub(vector<int> a,vector<int> b){
    int k=0;
    vector<int> c;
    for(int i=0;i<a.size();i++){
        k+=a[i];
        if(i<b.size()){
            k-=b[i];
        }
        c.push_back((k+100000000)%100000000);
        if(k<0){
            k=-1;
        }else{
            k=0;
        }
    }
    while(c.size() > 1 && c.back()==0){
        c.pop_back();
    }
    return c;
}
vector<int> div(vector<int> a,int b){
    int k=0;
    vector<int> c;
    for(int i=a.size()-1;i>=0;i--){
        k=k*100000000+a[i];
        c.push_back(k/b);
        k%=b;
    }
    reverse(c.begin(),c.end());
    while(c.size()>1&&c.back()==0){
        c.pop_back();
    }
    return c;
}

vector<int> mul(vector<int> a , int b){
    int t=0;
    vector<int> c;
    for(int i=0;i<a.size();i++){
        t+=a[i]*b;
        c.push_back(t%100000000);
        t/=100000000;
    }
    while(t){
        c.push_back(t%100000000);
        t/=100000000;
    }
    while(c.size()>1&&c.back()==0){
        c.pop_back();
    }
    return c;
}
signed main(){
	string ch1,ch2;
	cin>>ch1>>ch2;
	int j=0,sum=0,t=1;
    for(int i=ch1.size()-1;i>=0;i--){
        j++;
        sum=sum+t*(ch1[i]-'0');
        t*=10;
        if(j==8||i==0){
            a.push_back(sum);
            j=0;
            t=1;
            sum=0;
        }
        
    }
    j=0,sum=0,t=1;
    for(int i=ch2.size()-1;i>=0;i--){
        j++;
        sum=sum+t*(ch2[i]-'0');
        t*=10;
        if(j==8||i==0){
            b.push_back(sum);
            j=0;
            sum=0;
            t=1;
        }
    }
	while(1){
		int k=cmp(a,b);
//		for(int i=a.size()-1;i>=0;i--){printf("%lld",a[i]);}
//		printf("\n");
//		for(int i=b.size()-1;i>=0;i--){printf("%lld",b[i]);}A
//		printf("\nssss\n");
// Debug
		if(!k){a.swap(b);}
		if(k==3){
			a=mul(a,kkk);
			printf("%lld",a[a.size()-1]);
			if(a.size()>1){
				for(int i=a.size()-2;i>=0;i--){printf("%08lld",a[i]);}
			}
            return 0;
		}
        
        int numa=a[0]%2;
        int numb=b[0]%2;
        vector<int> m,n;
        if(numa){
            if(numb){
                m=sub(a,b);
                n=b;
            }else{
				m=a;
				n=div(b,2);
			}
        }else{
			if(numb){
                m=div(a,2);
                n=b;
            }else{
				m=div(a,2);
				n=div(b,2);
				kkk*=2;	
			}
		}
		a=m;b=n;
	}
	return 0;
}

【还望各位dalao给蒟蒻一个赞】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据治理工程师必备证书DAMA-CDGA/CDGP,含金量高

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

Nacos的Java SDK

配置管理 在界面上添加配置 我们在界面上新建了一个json类型的配置 使用SDK来获取配置 public String getConfig(String dataId, String group, long timeoutMs) throws NacosException名称类型描述dataIdstring配置 ID&#xff0c;采用类似 package.class&#xff08;如com…

10分钟vue初步入门

基础原理 使用vue开发&#xff0c;对于新手需要了解的两个关键点是 MVVM MVC模式变化而来&#xff0c;相对于MVC强调控制-模型-视图的责任分离之外&#xff0c;最大的特点就是引入ViewModel&#xff0c;支持双向绑定 比如你改变一个输入框 Input 标签的值&#xff0c;会自动…

仓库管理系统GreaterWMS的安装

本文是应网友 ubuntu 和 Nathan 要求写的&#xff1b;因为看起来 Nathan 比较着急&#xff0c;就突击了一下&#xff0c;因为时间仓促&#xff0c;错误在所难免&#xff0c;敬请谅解~ 什么是 GreaterWMS &#xff1f; GreaterWMS是完全开源的仓库管理系统。该库存管理系统是目前…

心脏病_冠心病智能预测模型(人工智能,机器学习,用于论文作业_专利_企业建模__项目申报_科研报告,收藏)

作者Toby&#xff0c;来自心脏病_冠心病智能预测模型 ​ 心脏病&#xff08;heart disease&#xff09;是心脏疾病的总称&#xff0c;包括风湿性心脏病、先天性心脏病、高血压性心脏病、冠心病、心肌炎等各种心脏病。 人体“发动机” 心脏是一个强壮的、不知疲倦、努力工作的…

更适合运动的耳机,设计时尚轻巧好用,南卡Runner CC3上手

很多喜欢健身的朋友&#xff0c;在锻炼的时候都会戴上一副耳机&#xff0c;这样可以在音乐的节奏中享受运动的乐趣。在运动耳机当中&#xff0c;骨传导耳机是这两年很受欢迎的一种类型&#xff0c;相比于更常见的真无线耳机&#xff0c;骨传导耳机因为特殊的发声方式&#xff0…

品优购项目-头部底端和整个页面底端制作

品优购项目(二) 3). nav 制作 nav 盒子通栏有高度 而且有个下边框1号盒子 左侧浮动 dorpdown 下拉导航 里面包含 dt dd2号盒子右侧浮动 navitems 导航栏组 11. logo 优化 logo 里面 首先放一个 h1 标签 &#xff0c;目的是为了提权&#xff0c;告诉搜索引擎&#xff0c;这个地方…

微信小程序开发—入门到跑路(四)

1、学习目标 今天所学习的所有知识点都是围绕自定义组件 &#xff0c; 具体参见&#xff1a;【指南>自定义组件】 知识点名称知识点内容难度系数要求程度组件创建和引用创建自定义组件、局部引用、全局引用、全局和局部比较、组件和页面的区别3星掌握组件样式样式的隔离特…

如何使用Moonbeam Safe质押GLMR/MOVR

通过Moonbeam Safe能够轻松实现与已验证的合约进行合约交互。Moonbeam的StakingInterface.sol&#xff08;虽然准确来说被描述为预编译而非合约&#xff09;已经在Moonscan上通过验证&#xff0c;能够使用Moonbeam Safe&#xff08;Gnosis的一个用户友好型分叉&#xff09;实现…

使用 vcpkg 安装 mathgl,但使用 find_package 命令却找不到的问题

问题描述 使用 vscode cmake vcpkg 进行c开发, 很 Nice. 但是在使用MathGL库的时候却出现了问题, 如果你的CMakeLists.txt 是这样写的: cmake_minimum_required(VERSION 3.0.0) project(mgl_demo VERSION 0.1.0)find_package(MathGL CONFIG REQUIRED)add_executable(mgl_de…

贝叶斯基础

概要 贝叶斯定理描述的是条件概率&#xff0c;不同于全局概率&#xff0c;它表示当某一个事件&#xff08;B&#xff09;发生时&#xff0c;另一个事件&#xff08;A&#xff09;发生的概率。从机器学习的角度&#xff0c;从全局无法知道事件&#xff08;A&#xff09;发生的概…

IT行业岗位分析系统设计与实现(Spark+Hadoop)

目 录 摘要 I ABSTRACT II 1 引言 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容与组织结构 1 2 相关理论与技术介绍 3 2.1 HDFS简介 3 2.2 Spark简介 4 2.3 MongoDB数据库简介 6 2.4 爬虫技术简介 7 2.5 Echarts简介 8 2.6 Pyqt5简介 8 2.7 本章小结 8 3 系统需求分析 9 3.1…

BertNet、RoBertaNe

又带来了可扩展、可解释&#xff0c;从预训练语言模型中高效提取知识图谱的新框架 来自加州大学圣迭戈分校&#xff08;UCSD&#xff09;、卡内基梅隆大学&#xff08;CMU&#xff09;等机构的研究者提出了一种自动知识抽取框架&#xff0c;可以从 BERT 或 RoBerta 等预训练语…

fpga实操训练(利用fpga实现pwm)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 pwm&#xff0c;其实就是方波。它的本质就是通过方波中占空比的调节&#xff0c;实现对外部设备的控制。简单如台灯&#xff0c;复杂如电机都是这么…

【Java系列】小小练习——带你回顾Java基础语法

返回主篇章         &#x1f447; 【Java】才疏学浅小石Java问道之路 Java小练习1. 练习一1.1 题目1.2 题解(附解析)2. 练习二2.1 题目2.2 题解(附解析)3. 练习三3.1 题目3.2 题解(附解析)小结1. 练习一 1.1 题目 定义三个变量&#xff0c;分别为人物性别、年龄、身高…

Python-实战:基于白鲸优化BWO算法的VMD超参数优化

目录 1、白鲸优化算法 2、BWO优化VMD参数 3、实战 3.1 原始时间序列数据 3.2 VMD分解--直接设置参数 3.3 采用BWO优化VMD 4、代码 在博客的基础上&#xff0c;本文利用白鲸优化算法对VMD的参数进行优化&#xff0c;采用python实现。 1、白鲸优化算法 白鲸优化算法([Beluga…

【Python】自动备份脚本

文章目录一、前言二、代码一、前言 之前因为疫情常常不知道会不会被封在家里&#xff0c;又不想把电脑带过来带过去&#xff0c;就做了这个自动备份的脚本。 功能如下&#xff1a; 自动从指定根目录里将找到的所有指定后缀名的文件备份到一个备份文件夹里&#xff1b;将备份…

ImageAdaptive-YOLO

又发现了一个yolo~~ 恶劣天气下的目标检测 也叫IA-YOLO 源代码&#xff1a;https://github.com/wenyyu/ImageAdaptive-YOLO 尽管基于深度学习的目标检测方法在传统数据集上取得了可喜的结果&#xff0c;但从恶劣天气条件下捕获的低质量图像中定位目标仍然具有挑战性。现有方…

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

写在片头&#xff1a;声明&#xff0c;勿杠 首先简单说一下&#xff0c;这三次面试阿里并不是一次性去面的&#xff0c;实际上第一次面试时候还在大四&#xff0c;找的实习岗&#xff0c;不太清楚是什么部门&#xff0c;别问我为什么还记得面试题&#xff0c;有记录和复盘的习…

C++Easyx世界杯版跑酷小游戏

&#x1f411;本文作者&#xff1a;克隆窝&#x1f411; &#x1f3ae;&#x1f50a;本文代码适合编译环境&#xff1a;DEV-C&#x1f4bb; ✨&#x1f9e8;温馨提示&#xff1a;此文乃作者心血&#xff0c;如要转载请标注版权&#xff0c;否则视为抄袭&#xff01;&#x1f38…