22 条题解
-
2
A+B Problem题解
新用户强烈建议阅读此帖
首先我们要理清思路
1.需要用到什么样的头文件?
2.用什么样的数据范围?
3.思路是什么?
首先题目中的数据范围是1≤a,b≤10^6, 而int 的范围是-2147483648-2147483647 正合题意,所以数据类型可以用int
话不多说,直接上代码
#include<iostream>//导入头文件,iostream里面是标准输入输出流(我说的什么?) using namespace std;//使用标准命名空间 int main(){//主函数,程序的入口 int a,b;//创建a,b两个整型变量 cin>>a>>b;//输入 a , b 两个变量 cout<<a+b; //输出a+b的内容 return 0; }
本蒟蒻发的第一篇题解,请多多支持喵~~
-
1
权威
#include<iostream> #include<cstring> #include<cstdio> #include<cstring> using namespace std; struct node { int data,rev,sum; node *son[2],*pre; bool judge(); bool isroot(); void pushdown(); void update(); void setson(node *child,int lr); }lct[233]; int top,a,b; node *getnew(int x) { node *now=lct+ ++top; now->data=x; now->pre=now->son[1]=now->son[0]=lct; now->sum=0; now->rev=0; return now; } bool node::judge(){return pre->son[1]==this;} bool node::isroot() { if(pre==lct)return true; return !(pre->son[1]==this||pre->son[0]==this); } void node::pushdown() { if(this==lct||!rev)return; swap(son[0],son[1]); son[0]->rev^=1; son[1]->rev^=1; rev=0; } void node::update(){sum=son[1]->sum+son[0]->sum+data;} void node::setson(node *child,int lr) { this->pushdown(); child->pre=this; son[lr]=child; this->update(); } void rotate(node *now) { node *father=now->pre,*grandfa=father->pre; if(!father->isroot()) grandfa->pushdown(); father->pushdown();now->pushdown(); int lr=now->judge(); father->setson(now->son[lr^1],lr); if(father->isroot()) now->pre=grandfa; else grandfa->setson(now,father->judge()); now->setson(father,lr^1); father->update();now->update(); if(grandfa!=lct) grandfa->update(); } void splay(node *now) { if(now->isroot())return; for(;!now->isroot();rotate(now)) if(!now->pre->isroot()) now->judge()==now->pre->judge()?rotate(now->pre):rotate(now); } node *access(node *now) { node *last=lct; for(;now!=lct;last=now,now=now->pre) { splay(now); now->setson(last,1); } return last; } void changeroot(node *now) { access(now)->rev^=1; splay(now); } void connect(node *x,node *y) { changeroot(x); x->pre=y; access(x); } void cut(node *x,node *y) { changeroot(x); access(y); splay(x); x->pushdown(); x->son[1]=y->pre=lct; x->update(); } int query(node *x,node *y) { changeroot(x); node *now=access(y); return now->sum; } int main() { scanf("%d%d",&a,&b); node *A=getnew(a); node *B=getnew(b); //连边 Link connect(A,B); //断边 Cut cut(A,B); //再连边orz Link again connect(A,B); printf("%d\n",query(A,B)); return 0; }
-
0
#include <iostream> #include <fstream> #include <string> #include <stdexcept> #include <ctime> #include <vector> #include <sstream> #include <limits> class MathUtils { public: static int add(int a, int b) { return a + b; } static bool validateInput(int num) { return num >= 0 && num <= 10000; } }; class Logger { private: std::string filename; public: Logger(const std::string& fname) : filename(fname) {} void log(const std::string& message) { std::ofstream file(filename, std::ios::app); if (file.is_open()) { time_t now = time(0); file << "[" << ctime(&now) << "] " << message << "\n"; } } std::vector<std::string> readLogs() { std::vector<std::string> logs; std::ifstream file(filename); if (file.is_open()) { std::string line; while (getline(file, line)) { logs.push_back(line); } } return logs; } }; class InputHandler { public: static int getInteger(const std::string& prompt) { int value; while (true) { std::cout << prompt; if (std::cin >> value) { if (MathUtils::validateInput(value)) { break; } else { std::cout << "输入必须在0-10000范围内\n"; } } else { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "无效输入,请输入整数\n"; } } return value; } }; class TestRunner { public: static void runTests() { testAddition(); testInputValidation(); std::cout << "所有测试通过\n"; } private: static void testAddition() { if (MathUtils::add(2, 3) != 5) { throw std::runtime_error("加法测试失败"); } if (MathUtils::add(0, 0) != 0) { throw std::runtime_error("零加法测试失败"); } } static void testInputValidation() { if (!MathUtils::validateInput(5000)) { throw std::runtime_error("输入验证测试失败"); } if (MathUtils::validateInput(-1)) { throw std::runtime_error("负输入验证测试失败"); } } }; void displayMenu() { std::cout << "\n===== 高级加法计算器 =====\n"; std::cout << "1. 计算两个数的和\n"; std::cout << "2. 查看计算历史\n"; std::cout << "3. 运行测试\n"; std::cout << "4. 退出\n"; std::cout << "选择: "; } int main() { Logger logger("calculator.log"); while (true) { displayMenu(); int choice; std::cin >> choice; try { switch (choice) { case 1: { int a = InputHandler::getInteger("输入第一个数: "); int b = InputHandler::getInteger("输入第二个数: "); int result = MathUtils::add(a, b); std::ostringstream oss; oss << a << " + " << b << " = " << result; logger.log(oss.str()); std::cout << "结果: " << oss.str() << "\n"; break; } case 2: { auto logs = logger.readLogs(); std::cout << "\n=== 计算历史 ===\n"; for (const auto& log : logs) { std::cout << log << "\n"; } break; } case 3: TestRunner::runTests(); break; case 4: return 0; default: std::cout << "无效选择\n"; } } catch (const std::exception& e) { std::cerr << "错误: " << e.what() << "\n"; logger.log(std::string("错误: ") + e.what()); } } }
-
-1
```cpp #include <bits/stdc++.h> using namespace std; #define LL long long const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; string a1 , b1; int a[500] , b[500] , c[500]; int main() { cin >> a1 >> b1; int lena = a1.size(); int lenb = b1.size(); for ( int i = 0 ; i < lena ; i++ ) { a[ lena - i ] = a1[i] - '0'; } for ( int i = 0 ; i < lenb ; i++ ) { b[ lenb - i ] = b1[i] - '0'; } int lenc = 1 , x = 0; while ( lenc <= lena || lenc <= lenb ) { c[lenc] = a[lenc] + b[lenc] + x; x = c[lenc] / 10; c[lenc] = c[lenc] % 10; lenc++; } if ( x > 0 ) { c[lenc] = x; } else { lenc--; } for ( int i = lenc ; i >= 1 ; i-- ) { cout << c[i]; } cout << endl; return 0; } //菜鸟驿站 //老六专属
-
-1
```cpp #include <bits/stdc++.h> using namespace std; #define LL long long const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; string a1 , b1; int a[500] , b[500] , c[500]; int main() { cin >> a1 >> b1; int lena = a1.size(); int lenb = b1.size(); for ( int i = 0 ; i < lena ; i++ ) { a[ lena - i ] = a1[i] - '0'; } for ( int i = 0 ; i < lenb ; i++ ) { b[ lenb - i ] = b1[i] - '0'; } int lenc = 1 , x = 0; while ( lenc <= lena || lenc <= lenb ) { c[lenc] = a[lenc] + b[lenc] + x; x = c[lenc] / 10; c[lenc] = c[lenc] % 10; lenc++; } if ( x > 0 ) { c[lenc] = x; } else { lenc--; } for ( int i = lenc ; i >= 1 ; i-- ) { cout << c[i]; } cout << endl; return 0; } //菜鸟驿站 //老六专属
-
-1
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; const int INF=0x3f3f3f; int main(){ string a1,b1; int a[500],b[500],c[500]; cin>>a1>>b1; int lena=a1.size(); int lenb=b1.size(); for(int i=0;i<lena;i++){ a[lena-i]=a1[i]-'0'; } for(int i=0;i<lenb;i++){ b[lenb-i]=b1[i]-'0'; } int lenc=1,x=0; while(lenc<=lena || lenc<=lenb){ c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]%10; lenc++; } if(x>0){ c[lenc]=x; } else{ lenc--; } for(int i=lenc;i>=1;i--) cout<<c[i]; cout<<endl;
return 0;
}
-
-2
#include<bits/stdc++.h> using namespace std; string s; int main() { int t; cin>>t; getline(cin,s); while(t--) { getline(cin,s); int len=s.size(),n=0; s[len]=' '; for(int i=0;i<=len;i++) { if(s[i]!=' ') n++; else { for(int j=i-1;j>=i-n;j--) cout<<s[j]; n=0; cout<<" "; } } cout<<endl; } return 0; }
-
-3
高精度加法
新人不会康林一个人 @杨时欢 俩提交都AC
阿米诺斯亲放心食用#include<bits/stdc++.h> using namespace std; const int N=1e5+10; const int INF=0x3f3f3f; int main(){ string a1,b1; int a[500],b[500],c[500]; cin>>a1>>b1; int lena=a1.size(); int lenb=b1.size(); for(int i=0;i<lena;i++){ a[lena-i]=a1[i]-'0'; } for(int i=0;i<lenb;i++){ b[lenb-i]=b1[i]-'0'; } int lenc=1,x=0; while(lenc<=lena || lenc<=lenb){ c[lenc]=a[lenc]+b[lenc]+x; x=c[lenc]/10; c[lenc]=c[lenc]%10; lenc++; } if(x>0){ c[lenc]=x; } else{ lenc--; } for(int i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }
提示:此代码可提交题@@高精度加法***
-
-4
#include<iostream> #include<cstring> #include<cstdio> #include<cstring> using namespace std; struct node { int data,rev,sum; node *son[2],*pre; bool judge(); bool isroot(); void pushdown(); void update(); void setson(node *child,int lr); }lct[233]; int top,a,b; node *getnew(int x) { node *now=lct+ ++top; now->data=x; now->pre=now->son[1]=now->son[0]=lct; now->sum=0; now->rev=0; return now; } bool node::judge(){return pre->son[1]==this;} bool node::isroot() { if(pre==lct)return true; return !(pre->son[1]==this||pre->son[0]==this); } void node::pushdown() { if(this==lct||!rev)return; swap(son[0],son[1]); son[0]->rev^=1; son[1]->rev^=1; rev=0; } void node::update(){sum=son[1]->sum+son[0]->sum+data;} void node::setson(node *child,int lr) { this->pushdown(); child->pre=this; son[lr]=child; this->update(); } void rotate(node *now) { node *father=now->pre,*grandfa=father->pre; if(!father->isroot()) grandfa->pushdown(); father->pushdown();now->pushdown(); int lr=now->judge(); father->setson(now->son[lr^1],lr); if(father->isroot()) now->pre=grandfa; else grandfa->setson(now,father->judge()); now->setson(father,lr^1); father->update();now->update(); if(grandfa!=lct) grandfa->update(); } void splay(node *now) { if(now->isroot())return; for(;!now->isroot();rotate(now)) if(!now->pre->isroot()) now->judge()==now->pre->judge()?rotate(now->pre):rotate(now); } node *access(node *now) { node *last=lct; for(;now!=lct;last=now,now=now->pre) { splay(now); now->setson(last,1); } return last; } void changeroot(node *now) { access(now)->rev^=1; splay(now); } void connect(node *x,node *y) { changeroot(x); x->pre=y; access(x); } void cut(node *x,node *y) { changeroot(x); access(y); splay(x); x->pushdown(); x->son[1]=y->pre=lct; x->update(); } int query(node *x,node *y) { changeroot(x); node *now=access(y); return now->sum; } int main() { scanf("%d%d",&a,&b); node *A=getnew(a); node *B=getnew(b); //连边 Link connect(A,B); //断边 Cut cut(A,B); //再连边orz Link again connect(A,B); printf("%d\n",query(A,B)); return 0; }
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 4481
- 已通过
- 1251
- 上传者