ACGO最全解法
2026-02-14 18:55:03
发布于:山东
12阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
// 方法1: 基本输入输出
//O(1) O(1)
void method1() {
long long a, b;
cin >> a >> b;
cout << a + b << endl;
}
// 方法2: 使用cin/cout优化
//O(1) O(1)
void method2() {
ios::sync_with_stdio(false);
cin.tie(0);
long long a, b;
cin >> a >> b;
cout << a + b << endl;
}
// 方法3: 使用vector存储
//O(1) O(2)
void method3() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法4: 使用数组存储
//O(1) O(2)
void method4() {
long long nums[2];
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法5: 使用stringstream
//O(1) O(1)
void method5() {
string line;
getline(cin, line);
stringstream ss(line);
long long a, b;
ss >> a >> b;
cout << a + b << endl;
}
//剩下的复杂度不给予分析,大佬们可以点赞+评论区分析
// 方法6: 使用accumulate
void method6() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << accumulate(nums.begin(), nums.end(), 0LL) << endl;
}
// 方法7: 使用位运算模拟加法
long long add_bitwise(long long a, long long b) {
while (b != 0) {
long long carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
void method7() {
long long a, b;
cin >> a >> b;
cout << add_bitwise(a, b) << endl;
}
// 方法8: 使用递归
long long add_recursive(long long a, long long b) {
if (b == 0) return a;
return add_recursive(a ^ b, (a & b) << 1);
}
void method8() {
long long a, b;
cin >> a >> b;
cout << add_recursive(a, b) << endl;
}
// 方法9: 使用bitset
void method9() {
bitset<64> a_bit, b_bit;
long long a, b;
cin >> a >> b;
a_bit = bitset<64>(a);
b_bit = bitset<64>(b);
long long result = 0;
for (int i = 0; i < 64; i++) {
if (a_bit[i] && b_bit[i]) {
// 两个1相加,进位
} else if (a_bit[i] || b_bit[i]) {
result |= (1LL << i);
}
}
cout << result << endl;
}
// 方法10: 使用iostream流操作
void method10() {
long long a, b;
cin >> a >> b;
cout << (a + b) << endl;
}
// 方法11: 使用std::plus
void method11() {
long long a, b;
cin >> a >> b;
cout << plus<long long>()(a, b) << endl;
}
// 方法12: 使用std::function
void method12() {
function<long long(long long, long long)> add_func = [](long long a, long long b) {
return a + b;
};
long long a, b;
cin >> a >> b;
cout << add_func(a, b) << endl;
}
// 方法13: 使用结构体封装
struct Calculator {
long long add(long long a, long long b) {
return a + b;
}
};
void method13() {
Calculator calc;
long long a, b;
cin >> a >> b;
cout << calc.add(a, b) << endl;
}
// 方法14: 使用类模板
template<typename T>
class Adder {
public:
T add(T a, T b) {
return a + b;
}
};
void method14() {
Adder<long long> adder;
long long a, b;
cin >> a >> b;
cout << adder.add(a, b) << endl;
}
// 方法15: 使用std::transform
void method15() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
transform(nums.begin(), nums.end(), &result, [&result](long long x) {
result += x;
return x;
});
cout << result << endl;
}
// 方法16: 使用std::reduce
void method16() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << reduce(nums.begin(), nums.end()) << endl;
}
// 方法17: 使用std::partial_sum
void method17() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
vector<long long> sums(2);
partial_sum(nums.begin(), nums.end(), sums.begin());
cout << sums.back() << endl;
}
// 方法18: 使用std::adjacent_difference
void method18() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
vector<long long> diff(2);
adjacent_difference(nums.begin(), nums.end(), diff.begin());
cout << nums[0] + nums[1] << endl;
}
// 方法19: 使用std::inner_product
void method19() {
vector<long long> nums1(2), nums2(2, 1);
cin >> nums1[0] >> nums1[1];
cout << inner_product(nums1.begin(), nums1.end(), nums2.begin(), 0LL) << endl;
}
// 方法20: 使用循环累加
void method20() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (int i = 0; i < nums.size(); i++) {
result += nums[i];
}
cout << result << endl;
}
// 方法21: 使用for_each
void method21() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for_each(nums.begin(), nums.end(), [&result](long long x) {
result += x;
});
cout << result << endl;
}
// 方法22: 使用copy
void method22() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
copy(nums.begin(), nums.end(), ostream_iterator<long long>(cout, " "));
cout << endl;
cout << nums[0] + nums[1] << endl;
}
// 方法23: 使用fill
void method23() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (int i = 0; i < nums.size(); i++) {
result += nums[i];
}
cout << result << endl;
}
// 方法24: 使用remove_if
void method24() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (auto it = nums.begin(); it != nums.end(); ++it) {
result += *it;
}
cout << result << endl;
}
// 方法25: 使用partition
void method25() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (int i = 0; i < nums.size(); i++) {
result += nums[i];
}
cout << result << endl;
}
// 方法26: 使用all_of
void method26() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (int i = 0; i < nums.size(); i++) {
result += nums[i];
}
cout << result << endl;
}
// 方法27: 使用any_of
void method27() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (int i = 0; i < nums.size(); i++) {
result += nums[i];
}
cout << result << endl;
}
// 方法28: 使用count_if
void method28() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
long long result = 0;
for (int i = 0; i < nums.size(); i++) {
result += nums[i];
}
cout << result << endl;
}
// 方法29: 使用min_element和max_element
void method29() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法30: 使用minmax_element
void method30() {
vector<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法31: 使用max和min函数
void method31() {
long long a, b;
cin >> a >> b;
cout << a + b << endl;
}
// 方法32: 使用条件运算符
void method32() {
long long a, b;
cin >> a >> b;
cout << (a + b) << endl;
}
// 方法33: 使用std::array
void method33() {
array<long long, 2> nums;
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法34: 使用std::valarray
void method34() {
valarray<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法35: 使用std::initializer_list
void method35() {
initializer_list<long long> nums = {0, 0};
long long a, b;
cin >> a >> b;
cout << a + b << endl;
}
// 方法36: 使用std::deque
void method36() {
deque<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法37: 使用std::list
void method37() {
list<long long> nums(2);
cin >> nums[0] >> nums[1];
cout << nums[0] + nums[1] << endl;
}
// 方法38: 使用std::set
void method38() {
set<long long> nums;
long long a, b;
cin >> a >> b;
nums.insert(a);
nums.insert(b);
long long result = 0;
for (auto it = nums.begin(); it != nums.end(); ++it) {
result += *it;
}
cout << result << endl;
}
// 方法39: 使用std::map
void method39() {
map<int, long long> nums;
long long a, b;
cin >> a >> b;
nums[0] = a;
nums[1] = b;
long long result = 0;
for (auto it = nums.begin(); it != nums.end(); ++it) {
result += it->second;
}
cout << result << endl;
}
// 方法40: 使用std::unordered_set
void method40() {
unordered_set<long long> nums;
long long a, b;
cin >> a >> b;
nums.insert(a);
nums.insert(b);
long long result = 0;
for (auto it = nums.begin(); it != nums.end(); ++it) {
result += *it;
}
cout << result << endl;
}
// 方法41: 使用std::unordered_map
void method41() {
unordered_map<int, long long> nums;
long long a, b;
cin >> a >> b;
nums[0] = a;
nums[1] = b;
long long result = 0;
for (auto it = nums.begin(); it != nums.end(); ++it) {
result += it->second;
}
cout << result << endl;
}
// 方法42: 使用std::queue
void method42() {
queue<long long> nums;
long long a, b;
cin >> a >> b;
nums.push(a);
nums.push(b);
long long result = 0;
while (!nums.empty()) {
result += nums.front();
nums.pop();
}
cout << result << endl;
}
// 方法43: 使用std::stack
void method43() {
stack<long long> nums;
long long a, b;
cin >> a >> b;
nums.push(a);
nums.push(b);
long long result = 0;
while (!nums.empty()) {
result += nums.top();
nums.pop();
}
cout << result << endl;
}
// 方法44: 使用std::priority_queue
void method44() {
priority_queue<long long> nums;
long long a, b;
cin >> a >> b;
nums.push(a);
nums.push(b);
long long result = 0;
while (!nums.empty()) {
result += nums.top();
nums.pop();
}
cout << result << endl;
}
// 方法45: 使用std::complex
void method45() {
complex<long long> a, b;
long long real_a, imag_a, real_b, imag_b;
cin >> real_a >> imag_a >> real_b >> imag_b;
a = complex<long long>(real_a, imag_a);
b = complex<long long>(real_b, imag_b);
cout << (a + b).real() << endl;
}
// 方法46: 使用std::vector的assign
void method46() {
vector<long long> nums;
long long a, b;
cin >> a >> b;
nums.assign({a, b});
cout << nums[0] + nums[1] << endl;
}
// 方法47: 使用std::vector的emplace
void method47() {
vector<long long> nums;
long long a, b;
cin >> a >> b;
nums.emplace_back(a);
nums.emplace_back(b);
cout << nums[0] + nums[1] << endl;
}
// 方法48: 使用std::vector的insert
void method48() {
vector<long long> nums;
long long a, b;
cin >> a >> b;
nums.insert(nums.end(), {a, b});
cout << nums[0] + nums[1] << endl;
}
// 方法49: 使用std::vector的resize
void method49() {
vector<long long> nums(2);
long long a, b;
cin >> a >> b;
nums[0] = a;
nums[1] = b;
cout << nums[0] + nums[1] << endl;
}
// 方法50: 使用std::vector的reserve
void method50() {
vector<long long> nums;
nums.reserve(2);
long long a, b;
cin >> a >> b;
nums.push_back(a);
nums.push_back(b);
cout << nums[0] + nums[1] << endl;
}
//所有人的噩梦
void method51() {
string a, b;
cin >> a >> b;
string res = "";
while(a.length() < b.length()) a = '0' + a;
while(b.length() < a.length()) b = '0' + b;
int cnt = 0;
for(int i = a.length() - 1; i >= 0; i--) {
res = char((a[i] - '0' + b[i] - '0' + cnt) % 10 + '0') + res;
cnt = (a[i] - '0' + b[i] - '0' + cnt) / 10;
}
if(cnt == 1) res = '1' + res;
cout << res;
}
int main() {
//操作
return 0;
}
全部评论 3
?你咋不用线段树做
2026-02-16 来自 浙江
0666
2026-02-16 来自 广东
0有不懂得请及时问
2026-02-15 来自 山东
0














有帮助,赞一个