D:heilong的烦恼

题目传送门

题意:根据运算符决定运算,最后输出运算结果

思路:循环+数组存储

因为代码实在是太长了,我才你一定不怎么会看所以我先将核心进位代码写在这里

加法进位:

    c[i]=a[i]+b[i];if(c[i]>=10){c[i]%=10;c[i+1]++;}

减法进位:

    if(a[i]<b[i]){a[i+1]--;a[i]+=10;}c[i]=a[i]-b[i];

乘法进位:

    c[i+j-1]=a[i]*b[j]+x+c[i+j-1];x=c[i+j-1]/10;c[i+j-1]%=10;

至于除法:

用减法来模拟除法,对于被除数的每一位都减去除数,一直减到当前位置的数字(包含前面的余数)小于除数(由于每一位的数组小于10,所以对于每一位最多进行10次运算)

好了现在我们来看看具体代码是怎么写的

加法运算:

void jiafa(){int lena,lenb,lenc,i,j,k,x;string s,ss;cin>>s;cin>>ss;lena=s.size();lenb=ss.size();fe(i,0,lena-1)a[lena-i]=s[i]-'0';//这里我们要先将字符串化成数组fe(i,0,lenb-1)b[lenb-i]=ss[i]-'0';//lenc=1;x=0;while(lenc<=lena||lenc<=lenb){//直接相加,然后加的时候考虑进位c[lenc]=a[lenc]+b[lenc]+x;x=c[lenc]/10;c[lenc]%=10;lenc++;}c[lenc]=x;if(c[lenc]==0)lenc--;//由于我们是直接相加,所以当两个数的长度不同的时候,我们是存在前导0的de(i,lenc,1)cout<<c[i];cout<<endl;return;
}

下面是减法运算:在开始减法运算前,我们需要知道,用大数减去小数是最简单的,所以我们先判断前面的那个数是大数还是小数,如果是小数的话我们就需要先输出一个“-”。

void jianfa(){int lena,lenb,lenc,i,j,k,x;string s,ss;cin>>s;cin>>ss;lena=s.size();lenb=ss.size();if(lena<lenb||(lena==lenb&&s<ss)){swap(lena,lenb);swap(s,ss);                //由于我们的string是可以直接进行比较的所以我们没有cout<<"-";                 //必要转化了数组再去比较,直接比}fe(i,0,lena-1)a[lena-i]=s[i]-'0';//处理字符串fe(i,0,lenb-1)b[lenb-i]=ss[i]-'0';i=1;while(i<=lena||i<=lenb){//进行减法的时候,考虑什么时候会被借位if(a[i]<b[i]){a[i]+=10;a[i+1]--;}c[i]=a[i]-b[i];i++;}lenc=i;while(c[lenc]==0&&lenc>1)lenc--;//老规矩处理前导0de(i,lenc,1)cout<<c[i];cout<<endl;return;
}

乘法运算:

void chengfa(){int lena,lenb,lenc,i,j,k,x;string s,ss;cin>>s;cin>>ss;lena=s.size();lenb=ss.size();fe(i,0,lena-1)a[lena-i]=s[i]-'0';//处理字符串fe(i,0,lenb-1)b[lenb-i]=ss[i]-'0';fe(i,1,lena){//处理数组和进位问题x=0;fe(j,1,lenb){c[i+j-1]=a[i]*b[j]+x+c[i+j-1];//当前乘积+上次乘积进位+原数x=c[i+j-1]/10;c[i+j-1]%=10;}c[i+lenb]=x;                        //进位}lenc=lena+lenb;while(c[lenc]==0&&lenc>1)lenc--;//别忘记删除前导0de(i,lenc,1)cout<<c[i];cout<<endl;return;
}

除法这几个里面较难的一个,下面我们看看把

int compare(){//比较现在的a和tmp的大小int i;if(a[0]>tmp[0])return 1;if(a[0]<tmp[0])return -1;de(i,a[0],1){if(a[i]>tmp[i])return 1;if(a[i]<tmp[i])return -1;}return 0;
}
void jian(){int flag,i;flag=compare();if(!flag){a[0]=0;return ;}if(flag==1){fe(i,1,a[0]){if(a[i]<tmp[i]){a[i+1]--;a[i]+=10;}a[i]-=tmp[i];}while(a[0]>0&&a[a[0]]==0)a[0]--;return;}
}
void chufa(){int lena,lenb,lenc,i,j,k,x;string s,ss;cin>>s;cin>>ss;a[0]=s.size();b[0]=ss.size();if(s.size()<ss.size()||(s.size()==ss.size()&&s<ss)){cout<<0<<endl<<s<<endl;return;}fe(i,1,a[0])a[i]=s[a[0]-i]-'0';fe(i,1,b[0])b[i]=ss[b[0]-i]-'0';c[0]=a[0]-b[0]+1;de(i,c[0],1){memset(tmp,0,sizeof(tmp));fe(j,1,b[0])tmp[j+i-1]=b[j];tmp[0]=b[0]+i-1;while(compare()>=0){//减法模拟,都是a数组与tmp的比较c[i]++;jian();}}while(c[0]>0&&c[c[0]]==0)c[0]--;if(c[0]==0){cout<<0<<endl;}else{de(i,c[0],1)cout<<c[i];//c是最后的商cout<<endl;}if(a[0]==0){cout<<0<<endl;}else{de(i,a[0],1)cout<<a[i];//a是最后的余数cout<<endl;}return ;
}

E:凢凢的烦恼

题目传送门

题意:给你两个数,a和b,求(a!)%(M),(b!)%(M),M=97126719690。

思路:我们这里有两种思路,首先我们看到这道题的数据之大,我们就可以猜测这道题必定不会是暴力可以做到的,但是我们又发现这题这么简单,会不会是我们想复杂了呢?特别是这种我们一看输出特定值的题,一般情况都会是有规律的(除非出题人是狗)那么我们就先暴力暴力

    int x,y;int da1=1,da2=1;while(1){cin>>x;for(i=1;i<=x;i++){da1*=i;da1%=M;}cout<<da1<<endl;}

然后我们就会发现,到达某个值后,后面的da1全为0,这个时候我们仔细找找就会发现那个值为1033

这道题的答案也就呼之欲出啦(是不是很简单啦(๑•̀ㅂ•́)و✧)

    int i,j;int x,y;int da1=1,da2=1;cin>>x>>y;if(x>1033)da1=0;else{for(i=1;i<=x;i++){da1*=i;da1%=pi;}}if(y>1033)da2=0;else{for(i=1;i<=y;i++){da2*=i;da2%=pi;}}if(da1>da2)cout<<"@@"<<endl;else if(da1<da2)cout<<"heilong"<<endl;else cout<<"kewu"<<endl;

我的天哪我们这么快就写到了F题了吗?w(゚Д゚)w

F:圈圈的烦恼

题目传送门

题意:这道题嘛,咱们抽象抽象,最后就可以看成在一段序列中,找到最长上升子序列,只不过呢,因为这次的数据比较大,我们不可能再用原来()的办法了,5e5的数据必定会TLE的,因此我们需要想一想如何将时间复杂度压缩到(n)到(nlogn)不然就要凉凉︿( ̄︶ ̄)︿

思路:那么应该是跑一遍就应该要出答案,首先明确一个点,我们要知道,要想上升子序列最长,那么每一跳的高度要尽可能的低。

此时我们创建一个dp[len]数组

len是现在我们得到的最长上升子序列的长度

然后就是不断的去维护这个dp数组了。

当前a[i]>dp[len]时,说明这个a[i]满足条件,那么我们这时更新数组,dp[++len]=a[i]

不然,我们就在dp数组中找到一个dp[j],使得a[i]<dp[j]<=a[i+1],此时我们更新数组dp[j]=a[i+1]

第一步我相信大家应该都理解了,我们来看第二步,首先现在的最长子序列的长度是已经确定了的,必定长为len,那么这个时候,如果能够找到这一个j,更新dp数组,使得dp数组一直保持着线性的性质,方便我们查找,这个时候你会问,那我更改dp[len]值怎么办,那我们既然能够使得我dp[len]>a[i],那么我就是满足最长上升子序列的性质,那么就可以更改,这又有什么关系呢?

举个例子┗|`O′|┛ 嗷~~

1 3 8 5 7

我们发现8能够在3后面,5也能在3后面,那为什么我们不让5在3的后面呢?

那么现在我们来瞅瞅代码:

    cin>>n;fe(i,1,n)cin>>a[i];len=1;dp[len]=a[1];fe(i,2,n){if(a[i]>dp[len])dp[++len]=a[i];else {da1=lb(dp+1,dp+len+1,a[i])-dp;//二分查找,减少时间复杂度,阔以自己写二分哦dp[da1]=a[i];                //我用的自带的二分}}cout<<len<<endl;

是不是很吃惊,是不是感觉很惊讶o(*^@^*)o,没办法有些题,想到了就很简单,想不到它也很简单,只不过做不来而已~~( ﹁ ﹁ ) ~~~

好吧今天的题解就到这里,期待下一次的相遇(づ ̄3 ̄)づ╭❤~

ACM4.3对抗赛DEF题题解(原来如此简单,超级详细入门必备)相关推荐

  1. 2021卓见杯第三届CCPC河南省省赛所有题超详细题解附加榜单真题解析,简单代码+详细注释+思想,要看的,补题的速速点进来 2021 10.30

    本人现在比较菜,所以难免出现错误,文章中有不太恰当地方,还请大家指正. 是否因为出题人的简短题解而发愁?,是否看不懂出题人的变态模板标程?是否因为自己是小白而苦恼?来看这片文章,帮助你解决这些问题 题 ...

  2. 刷完这套题,我才发现Verilog原来如此简单----HDLBits答案系列---- Latches and Flip-Flops

    写在前面 全部答案汇总:刷完这套题,我才发现Verilog原来如此简单----HDLBits答案汇总 今天更新Circuits章节中Sequential Logic的1个小节:Latches and ...

  3. Jarvis OJ 刷题题解 RE

    最近比赛有点多 决定把 脱强壳  还有软件调试 还有 漏洞战争 放一放 先刷一些题目压压惊 最终还是选择了 Jarvis OJ   (buuctf 太卡了... 以前也写过几道  === 希望能把上面 ...

  4. 快速幂||取余运算【模板】(洛谷P1226题题解,Java语言描述)

    题目要求 P1226题目链接 分析 标准的快速幂取模算法板子,之前这个算法我在这篇文章中讲过了:<快速幂算法详解&&快速幂取模算法详解>. 这里选择使用比较简单的API实现 ...

  5. 用任意合法序列建立一棵二叉树(洛谷P1305题题解,Java语言描述)

    前言 这题是极其麻烦极其麻烦的一道题(前提是你不知道它有套路)-- 我们不讲那些歪门邪道,我们正儿八经的解一下,想正经求解,很麻烦很麻烦... 题目要求 P1305题题解 分析 这题你看着容易,那是你 ...

  6. HDU各种比赛题题解(一)

    HDU各种比赛题题解(一) Gardon-DYGG Contest 1 HDU1178 Heritage from father[水题] - 海岛Blog - CSDN博客 HDU1181 变形课[D ...

  7. 第十二届蓝桥杯国赛真题+题解 Python

    文章目录 写在前面 试题A:带宽 试题 B: 纯质数 试题C: 完全日期 试题D: 最小权值 试题 E: 大写 试题 F: 123 试题 G: 冰山 试题 H: 和与乘积 试题 I: 二进制问题 试题 ...

  8. 2021第十二届蓝桥杯大赛软件赛省赛C++ C组真题题解

    ============================== 2019-2021蓝桥杯C++ C组真题题解: 2019第十届蓝桥杯大赛软件类省赛C++ C组真题题解 2020第十一届蓝桥杯大赛软件类省 ...

  9. ccf-csp 2015春季真题题解

    图像旋转 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度. 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可. 输入格式 输入的 ...

最新文章

  1. 敏捷开发实践总结(二):关于测试
  2. 这可能是Python面向对象编程的最佳实践
  3. mysql的覆盖索引原理_「Mysql索引原理(七)」覆盖索引
  4. 为什么B+树比B树更适合做数据库索引
  5. c语言while找rn,STM32Fatfs遍历文件(C语言实现)
  6. Python的魔法方法 .
  7. jsx怎么往js里传参数_Angular、React 当前,Vue.js 优劣几何?
  8. LeetCode 636. 函数的独占时间(栈)
  9. 罗永浩的电子烟公司融资3000万元?8月或将发布新品 定价600元左右
  10. Zero Shot | 一文了解零样本学习
  11. (004)每日SQL学习:物化视图之二
  12. c语言中(char)的用法,c语言中char的用法是什么意思.docx
  13. 蒙特卡洛方法(Monte-Carlo Simulation)
  14. 【九层之台】Web开发教程:0. 准备
  15. 软件工程师能力自我评价表
  16. Mybatis-Plus如何使用
  17. 一个字等于几个字节,怎么确定机器是16/32/64位机器
  18. 【机器视觉系统】基于3DOF机械臂的五子棋机器人(1)
  19. 银行支付接口测试怎么执行
  20. mysql强制杀进程_mysql 杀掉(kill) lock进程脚本

热门文章

  1. 身边的RFID产品应用
  2. 名茶事典——【马骝搣】
  3. 计算机专业湖北二本大学排名及分数线,湖北二本大学名单及分数线一览
  4. 摸鱼kik的Flutter架构搭建
  5. PYTHON:大整数乘法(分治法)
  6. 语音转文字和音频文件转文字应该如何完成
  7. 利用编译器宏完美的输出调试信息
  8. 10.OP-TEE OS启动(一)
  9. 计算机在测控技术与仪器中的应用,浅谈智能化技术在测控技术与仪器中的应用...
  10. Python反反爬系列(四)----前端JS进行AES加密,Python解密