177 条题解
-
-2
特此声明,以上代码来自洛谷网站与CSDN,# hetao2909413 (𝐀𝐊𝐀奥利给),hetao138043 (言射兼)转载请附加。 {我只管搬运
别看我啊,我上面都是犇牪牛
``` #pragma GCC diagnostic error "-std=c++11" #pragma GCC target("avx") #pragma GCC optimize(1) #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") #include <algorithm> //STL 通用算法 #include <bitset> //STL 位集容器 #include <cctype> //字符处理 #include <cerrno> //定义错误码 #include <cfloat> //浮点数处理 #include <ciso646> //对应各种运算符的宏 #include <climits> //定义各种数据类型最值的常量 #include <clocale> //定义本地化函数 #include <cmath> //定义数学函数 #include <complex> //复数类 #include <csignal> //信号机制支持 #include <csetjmp> //异常处理支持 #include <cstdarg> //不定参数列表支持 #include <cstddef> //常用常量 #include <cstdio> //定义输入/输出函数 #include <cstdlib> //定义杂项函数及内存分配函数 #include <cstring> //字符串处理 #include <ctime> //定义关于时间的函数 #include <cwchar> //宽字符处理及输入/输出 #include <cwctype> //宽字符分类 #include <deque> //STL 双端队列容器 #include <exception> //异常处理类 #include <fstream> //文件输入/输出 #include <functional> //STL 定义运算函数(代替运算符) #include <limits> //定义各种数据类型最值常量 #include <list> //STL 线性列表容器 #include <locale> //本地化特定信息 #include <map> //STL 映射容器 #include <memory> //STL通过分配器进行的内存分配 #include <new> //动态内存分配 #include <numeric> //STL常用的数字操作 #include <iomanip> //参数化输入/输出 #include <ios> //基本输入/输出支持 #include <iosfwd> //输入/输出系统使用的前置声明 #include <iostream> //数据流输入/输出 #include <istream> //基本输入流 #include <iterator> //STL迭代器 #include <ostream> //基本输出流 #include <queue> //STL 队列容器 #include <set> //STL 集合容器 #include <sstream> //基于字符串的流 #include <stack> //STL 堆栈容器 #include <stdexcept> //标准异常类 #include <streambuf> //底层输入/输出支持 #include <string> //字符串类 #include <typeinfo> //运行期间类型信息 #include <utility> //STL 通用模板类 #include <valarray> //对包含值的数组的操作 #include <vector> //STL 动态数组容器 #include <bits/stdc++.h> //万能头文件 using namespace std; int main() {
int pow(int a,int b){//简单较慢的快速幂,但是很简单 if(b==0)//递归边界之一:a^0=1(暂且不考虑a=0) return 1; if(b==1)//递归边界之二:a^1=a return a; if(b==2)//递归边界之三:a^2=a*a return a*a; if(b%2==0)//快速幂的核心递归部分:当2|b时,a^b=(a^(b/2))^2 return pow(pow(a,b/2),2); else//递归部分:当b%2=1时,a^b=a^(b-1)*a return pow(a,b-1)*a; } struct integer { short i[126];//四位一压,所以共有126*4=504位,不会爆 bool pn;//我还考虑了符号...... integer( ){//构造函数初始化 int j; pn=false; for(j=0;j<126;j++) i[j]=0; }//这个应该都看得懂吧...... void read( ){//成员函数负责读入 int j,k,m=0,n=0; char ii[504]={0}; bool zero=true; scanf("%s",ii);//读入 if(ii[0]=='-')//正负处理 pn=true; else pn=false; for(j=503;j>-1;j--)//处理绝对值 if(ii[j]>0){//找到个位 for(k=j;k>-1;k--) if(ii[k]>='0' && ii[k]<='9') { n++; i[m]+=pow(10,n-1)*(ii[k]-'0');//这一步最难懂,慢慢琢磨,想一想怎么往高插入 if(n==4){//四位一压,别过界 n=0; m++; } } break; } for(j=0;j<126;j++) if(i[j]>0) zero=false; if(zero) pn=false; return; } void write( ){//成员函数负责输出 int j,k,a,b,c,d; bool zero=true; for(j=0;j<126;j++)//分清楚0和-0是一码事 if(i[j]>0) zero=false; if(zero) pn=false; if(pn)//负号 putchar('-'); for(j=125;j>-1;j--)//找到最高位 if(i[j]>0) { cout<<i[j];//省略前导0 for(k=j-1;k>-1;k--){//一定注意这里不能省略前导0!!!这也是为什么四位一压麻烦的原因之一 a=i[k]/1000; b=i[k]/100%10; c=i[k]/10%10; d=i[k]%10; putchar(a+'0'); putchar(b+'0'); putchar(c+'0'); putchar(d+'0'); } return; } putchar('0');//如果自始至终都是0(不进循环,即本数为0),输出0 return; } integer operator=(const int a){//把int型转化成integer自定义型 int b,j,k; bool zero=true; b=a;//注意a是const类型,不可改变! if(a<0){//对负数的处理 b=-b; pn=true; } else pn=false; for(j=0;j<126;j++){//想一想,为什么是10000不是10 i[j]=b%10000; b/=10000; if(b==0){ for(k=j+1;k<126;k++) i[k]=0; break; } } for(j=0;j<126;j++)//还是那句话,分清楚0和-0是一码事 if(i[j]>0) zero=false; if(zero) pn=false; return *this; } integer(int a){//重载运算符里最难懂的部分,注意一定要有这个(只要你有对赋值语句的重载最好都加上) *this=a; } integer operator+(const integer &a){//对加号的重载 integer b; int j; bool zero=true; if(*this==0)//0加任何数,仍得这个数 return a; else if(a==0) return *this; if(pn==a.pn){//同号两数相加,取相同的符号,并把绝对值相加 b.pn=pn; for(j=0;j<125;j++){ b.i[j]+=i[j]+a.i[j]; b.i[j+1]+=b.i[j]/10000;//还是那个问题,想想为什么是10000不是10 b.i[j]=b.i[j]%10000; } b.i[125]+=i[125]+a.i[125];//专防数组越界(即访问无效内存) b.i[j]=b.i[j]%10000; for(j=0;j<126;j++)//不多说了,你懂的 if(b.i[j]>0) zero=false; if(zero) b.pn=false; return b; } else{//异号两数相加,取绝对值较大数的符号,并把绝对值相减 int tw=0; integer x,y; x.pn=false; y.pn=false; for(j=0;j<126;j++){ x.i[j]=i[j]; y.i[j]=a.i[j]; } if(x>y){//判断哪个数的绝对值大 b.pn=pn; for(j=0;j<126;j++){ b.i[j]=i[j]-a.i[j]-tw; tw=0; if(b.i[j]<0){ b.i[j]+=10000; tw++; } } for(j=0;j<126;j++) if(b.i[j]>0) zero=false; if(zero) b.pn=false; return b; } else if(x<y){ b.pn=a.pn; for(j=0;j<126;j++){ b.i[j]=a.i[j]-i[j]-tw; tw=0; if(b.i[j]<0){ b.i[j]+=10000; tw++; } } for(j=0;j<126;j++) if(b.i[j]>0) zero=false; if(zero) b.pn=false; return b; } else{//互为相反数的两个数和为0 b=0; for(j=0;j<126;j++) if(i[j]>0) zero=false; if(zero) pn=false; return b; } } } bool operator>(const integer &a)const{//判断大小 int j; if(pn && (!a.pn))//负数小于正数 return false; else if((!pn) && a.pn)//正数大于负数 return true; else if(pn){//两个负数比较,绝对值大的反而小 for(j=125;j>-1;j--){ if(i[j]<a.i[j]) return true; else if(i[j]>a.i[j]) return false; } return false; } else{//两个正数比较,绝对值大的就大 for(j=125;j>-1;j--){ if(i[j]>a.i[j]) return true; else if(i[j]<a.i[j]) return false; } return false;//相等返回false } } bool operator<(const integer &a)const{//小于即大于的完全相反 return a>(*this); } bool operator==(const integer &a)const{//等于即既不大于又不小于 return !(*this>a || *this<a); } bool operator>=(const integer &a)const{//大于等于即不小于 return !(*this<a); } bool operator<=(const integer &a)const{//小于等于即不大于 return !(*this>a); } bool operator!=(const integer &a)const{//不等于就是不等于嘛 return !(*this==a); } }; int main( ) { a,b = tuple(map(int, input().split(" "))) if a == 1: if b == 1: print(2) if b == 2: print(3) if b == 3: print(4) if b == 4: print(5) if b == 5: print(6) if b == 6: print(7) if b == 7: print(8) if b == 8: print(9) if b == 9: print(10) if b == 10: print(11) if b == 11: print(12) if b == 12: print(13) if b == 13: print(14) if b == 14: print(15) if b == 15: print(16) if b == 16: print(17) if b == 17: print(18) if b == 18: print(19) if b == 19: print(20) if b == 20: print(21) if b == 21: print(22) if b == 22: print(23) if b == 23: print(24) if b == 24: print(25) if b == 25: print(26) if b == 26: print(27) if b == 27: print(28) if b == 28: print(29) if b == 29: print(30) if b == 30: print(31) if b == 31: print(32) if b == 32: print(33) if b == 33: print(34) if b == 34: print(35) if b == 35: print(36) if b == 36: print(37) if b == 37: print(38) if b == 38: print(39) if b == 39: print(40) if b == 40: print(41) if b == 41: print(42) if b == 42: print(43) if b == 43: print(44) if b == 44: print(45) if b == 45: print(46) if b == 46: print(47) if b == 47: print(48) if b == 48: print(49) if b == 49: print(50) if b == 50: print(51) if b == 51: print(52) if b == 52: print(53) if b == 53: print(54) if b == 54: print(55) if b == 55: print(56) if b == 56: print(57) if b == 57: print(58) if b == 58: print(59) if b == 59: print(60) if b == 60: print(61) if b == 61: print(62) if b == 62: print(63) if b == 63: print(64) if b == 64: print(65) if b == 65: print(66) if b == 66: print(67) if b == 67: print(68) if b == 68: print(69) if b == 69: print(70) if b == 70: print(71) if b == 71: print(72) if b == 72: print(73) if b == 73: print(74) if b == 74: print(75) if b == 75: print(76) if b == 76: print(77) if b == 77: print(78) if b == 78: print(79) if b == 79: print(80) if b == 80: print(81) if b == 81: print(82) if b == 82: print(83) if b == 83: print(84) if b == 84: print(85) if b == 85: print(86) if b == 86: print(87) if b == 87: print(88) if b == 88: print(89) if b == 89: print(90) if b == 90: print(91) if b == 91: print(92) if b == 92: print(93) if b == 93: print(94) if b == 94: print(95) if b == 95: print(96) if b == 96: print(97) if b == 97: print(98) if b == 98: print(99) if b == 99: print(100) if b == 100: print(101) elif a == 2: if b == 1: print(3) if b == 2: print(4) if b == 3: print(5) if b == 4: print(6) if b == 5: print(7) if b == 6: print(8) if b == 7: print(9) if b == 8: print(10) if b == 9: print(11) if b == 10: print(12) if b == 11: print(13) if b == 12: print(14) if b == 13: print(15) if b == 14: print(16) if b == 15: print(17) if b == 16: print(18) if b == 17: print(19) if b == 18: print(20) if b == 19: print(21) if b == 20: print(22) if b == 21: print(23) if b == 22: print(24) if b == 23: print(25) if b == 24: print(26) if b == 25: print(27) if b == 26: print(28) if b == 27: print(29) if b == 28: print(30) if b == 29: print(31) if b == 30: print(32) if b == 31: print(33) if b == 32: print(34) if b == 33: print(35) if b == 34: print(36) if b == 35: print(37) if b == 36: print(38) if b == 37: print(39) if b == 38: print(40) if b == 39: print(41) if b == 40: print(42) if b == 41: print(43) if b == 42: print(44) if b == 43: print(45) if b == 44: print(46) if b == 45: print(47) if b == 46: print(48) if b == 47: print(49) if b == 48: print(50) if b == 49: print(51) if b == 50: print(52) if b == 51: print(53) if b == 52: print(54) if b == 53: print(55) if b == 54: print(56) if b == 55: print(57) if b == 56: print(58) if b == 57: print(59) if b == 58: print(60) if b == 59: print(61) if b == 60: print(62) if b == 61: print(63) if b == 62: print(64) if b == 63: print(65) if b == 64: print(66) if b == 65: print(67) if b == 66: print(68) if b == 67: print(69) if b == 68: print(70) if b == 69: print(71) if b == 70: print(72) if b == 71: print(73) if b == 72: print(74) if b == 73: print(75) if b == 74: print(76) if b == 75: print(77) if b == 76: print(78) if b == 77: print(79) if b == 78: print(80) if b == 79: print(81) if b == 80: print(82) if b == 81: print(83) if b == 82: print(84) if b == 83: print(85) if b == 84: print(86) if b == 85: print(87) if b == 86: print(88) if b == 87: print(89) if b == 88: print(90) if b == 89: print(91) if b == 90: print(92) if b == 91: print(93) if b == 92: print(94) if b == 93: print(95) if b == 94: print(96) if b == 95: print(97) if b == 96: print(98) if b == 97: print(99) if b == 98: print(100) if b == 99: print(101) if b == 100: print(102) else: print(a+b) return 0;
}
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- 递交数
- 21681
- 已通过
- 7188
- 上传者