C++ int128
**
快速地调用,一般的方法
**
还可以,不过并不是最大的,有时还差点意思,相当于longlong强化版
#include<iostream>
using in = signed long long int;
int main(){
int n,m;
std::cin >> n >> m;
}
解题时使用的int128,避免了使用高精度的高代码强度
#include <bits/stdc++.h>
using in = __int128;
void print(__int128 a) {
if(a<0) {
std::cout<<"-";
a=-a;
}
if(a>9) {
print(a/10);
}
putchar(a%10+'0');
}
int main() {
int n,m;
std::cin >> n >> m;
in ans = 0;
in f[m][m];
int now[m];
for(int i = 0; i<n ; i++) {
memset(f,0,sizeof(f));
for(int j = 0; j<m ; j++) {
std::cin >> now[j];
f[j][j] = now[j];
}
for (int h = 1; h < m; h++) {
for (int left = 0; left < m - h; left++) {
int right = left + h;
in k1 = f[left + 1][right] * 2 + now[left];
in k2 = f[left][right - 1] * 2 + now[right];
f[left][right] = std::max(k1, k2);
}
}
ans += f[0][m - 1];
}
ans *= 2;
print(ans);
std::cout<<std::endl;
return 0;
}
int128模板如下
需要手写输入输出,相当于C++内测的一种数据类型
max int128:
±85070591730234615865843651857942052864
约为10^38
足够解决大部分高精度,大数据问题
#include <bits/stdc++.h>
using in = __int128;
//max int128:
//85070591730234615865843651857942052864
//10^38
//+ 38 win ;; +- 76 win
void print(__int128 a) {
if(a<0) {
std::cout<<"-";
a=-a;
}
if(a>9) {
print(a/10);
}
putchar(a%10+'0');
}
int main() {
long long n;
std::cin >> n;
in f[n];
in ans;
f[0] = 1;
std::cout<<"AAAAAAAAAAA"<<std::endl;
for(int i = 1; i<n ; i++) {
// memset(f,0,sizeof(f));
ans = f[i-1]*2;
f[i] = ans;
std::cout<<i<<std::endl;
print(ans);
std::cout<<std::endl;
}
std::cout<<"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"<<std::endl;
for(int i = n-1; i>0 ; i--) {
ans = f[i] / 2;
f[i-1] = ans;
std::cout<<i<<std::endl;
print(ans);
std::cout<<std::endl;
}
std::cout<<"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"<<std::endl;
f[0] = 1;
for(int i = n-1; i>0 ; i--) {
ans = -f[i-1]*2;
f[i] = ans;
std::cout<<i<<std::endl;
print(ans);
std::cout<<std::endl;
}
}