- 博客(28)
- 收藏
- 关注
原创 C++大数取模的一般方法
一般来说,如果某一个数不太大,我们可以直接与另一个不太大的数直接取余求模。但有些数的长度可能会是百位甚至千位,这时候C++的 unsigned long long 也无法存下它们,我们就需要别的思路和方法来对它们取模。假如有一个十进制数字串,比如3456,那么它可以拆分成(((3*10+4)*10+5)*10+6),之后对每一步取余,假设跟5取余,则有:(3*10+4)%5==4, (4*10+5)%5==0, (0*10+6)%5==1。即3456对5取模值为1。那么当数字串更长时,同样可以用到这个
2022-04-03 10:28:18
4331
原创 结合了位运算的快读
在做算法题的时候,有时候会被卡时间,用普通的输入输出流可能会导致超时,常用的加快输入输出的方法有两种。ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);//0换成false也可以另一种就是快读:inline ll read(){ ll f = 1, x = 0; char s = getchar(); while(s < '0' || s > '9') { if(s == '-') f = -
2022-02-08 21:51:56
565
原创 C++大数加减乘除运算的具体操作
C++能储存的最大的数也只有2^64-1,但在有些题目中,我们会处理到一些非常非常大的数,这时候用unsigned long long也完全无法存下,这时候我们就需要另外设计一个程序来实现很大的数之间的相加或者相乘。
2022-02-06 20:19:27
2664
2
原创 C++易错易混库函数及语法归纳
C++里有很多自带的函数,在使用的时候我总是会忘记具体的用法,今天在这里汇总一下我自己易错的一些函数。substr函数:substr有两种用法假设有string s="0123456789",则有:string sub1=s.substr(5); //这里只有一个数字5,代表从下标5开始一直到结尾:sub1="56789";string sub2=s.substr(5,3); //从下标为5开始截取长度为3的字符串,则此时的sub2="567";sub1="56789"; su..
2022-02-06 11:41:36
415
原创 二分算法习题-Pie
这一道题要不是放在了二分算法这一章节,不然我是绝对想不到要用二分算法。不过题目里也提到了误差要在10^-3内,多半也会想到与二分算法八九不离十。这题主要麻烦在多块派不可以拼凑成一个派分给他的朋友。设计程序的思路可以是这样:设置一个中间值,每个人分到这个中间值大小的派,最多可以分多少人,如果小于题目要求,说明中间值大了,取中间值左边的区间的中间值;反之则取中间值右边的区间的中间值,一直这么循环,到最后两端值之差小于10^-6则跳出。此时的中间值就是我们要求的最大体积数。C语言代码实现如下:...
2021-11-26 21:45:40
464
原创 oj趣味题:柱状图排序
题目描述:柱状图是一种使用频率很高的统计图表,而一种常见的操作就是对柱状图中的各个项目的大小进行排序。现在请你实现这个功能。input:首先输入一个正整数T,表示测试数据的组数。接下来T组数据,每组数据由m行长度相等的字符串s_1~s_m构成,表示一个柱状图。这些字符串的最后一行一定形如“ABC…”,每个大写英文字母表示柱状图的一个项目名;之前的每一行都由字符“#”和字符“$”构成,每一个“#”表示一个单位高度的矩形,“$”表示空格,某一项目名上的“#”越多则该项目的值就越大。输入数据保证是一个合法
2021-11-26 21:20:38
818
原创 拆分N的每一位数,构成两个新数,使乘积最大-vj
题目大意是将所给的数分成两个部分,比如123可以分成12和3等多种情况。在众多情况下,取两者乘积最大的那种情况,输出最大乘积的结果。这个题目十分复杂,因为当N较大时,可以拆分的情况非常多,如果单纯地每种情况都乘一遍进行比较的话,肯定会超时。我们得筛去一些情况,首先我们要确保两边的数位数上均分,就如数54321,分成51和432,肯定比分成5和4321的乘积要大。均分后,每个数具体该如何分配?这个需要我们仔细想想。我给出了简要的证明,如下:设有两数a,b(a>b),现在要将一个个位数i插在..
2021-11-21 12:45:47
877
原创 前缀和习题
题目是英文的,翻译成中文的意思大致如下:第一行输入一个整数n,代表有n组数据,每组数据输入两个数a,b(a<b,a,b都要是奇数),代表的是a到b这个范围,找出这个范围内的多个数,这些数要满足其自身是素数,并且它自身加1后除以二仍为素数。输出满足这样的条件的数的个数。这个题要做出来不难,主要是难在如果用常规方法的话,一定会超时。这时候就要求我们用前缀和来避免超时的问题。前缀和是一种预处理,在之后的计算中直接应用前面已经算出的结果。用c++语言实现如下:#include<io
2021-11-21 12:16:17
362
原创 C语言高效自定义sort函数(排序)
排序经常会在一个程序里面用到,但当排序范围较大时,时间复杂度所带来的问题就显得尤其明显,今天就总结了一个排序的自定义函数,有点小复杂,但是执行效率却是杠杠的,在竞赛里也会大幅减小超时的可能。话不多说,奉上代码:void sort(int a[],int left ,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right) return; while(i!=j
2021-11-21 11:45:39
4210
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人