蓝桥杯刷题
洛谷P10425R格式
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n;
string a;
vector<int> mul(vector<int>&A, vector<int>&B){
vector<int> C(A.size() + B.size(), 0);
for(int i = 0; i < A.size(); i++){
int t = 0;
for(int j = 0; j < B.size(); j++){
t += A[i] * B[j] + C[i + j];
C[i + j] = t % 10;
t /= 10;
}
if(t)C[i + B.size()] += t;
}
while(C.size() > 1 && C.back() == 0)C.pop_back();
return C;
}
int main() {
cin >> n >> a;
vector<int>A;
int cnt = 0;
for(int i = a.size() - 1; i >= 0; i--){
if(a[i] != '.')A.push_back(a[i] - '0');
}
reverse(a.begin(), a.end());
cnt = a.find('.');
vector<int> B;
B.push_back(2);
while(n--){
A = mul(A, B);
}
for(int i = A.size() - 1; i > cnt; i--)cout << A[i];
if(A[cnt - 1] >= 5)cout << A[cnt] + 1;
else cout << A[cnt];
return 0;
}
洛谷P8783统计子矩阵
#include <iostream>
using namespace std;
int n, m, k;
const int N = 505;
long long a[N][N], s[N][N], b[N];
long long ans;
int main() {
cin >> n >> m >> k;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> a[i][j];
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
s[i][j] = s[i - 1][j] + a[i][j];
}
}
for(int u = 1; u <= n; u++){
for(int d = u; d <= n; d++){
for(int i = 1; i <= m; i++){
b[i] = s[d][i] - s[u - 1][i];
}
int sum = 0;
for(int i = 1, j = 1; j <= m; j++){
sum += b[j];
while(i <= j){
if(sum > k){
sum -= b[i];
i++;
}
else{
ans += j - i + 1;
break;
}
}
}
}
}
cout << ans << endl;
return 0;
}
洛谷P8784积木画
#include <iostream>
using namespace std;
const int N = 1e7, mod = 1e9 + 7;
long long f[N];
int n;
int main() {
cin >> n;
f[0] = 1, f[1] = 1, f[2] = 2, f[3] = 5;
for(int i = 4; i <= n; i++){
f[i] = (2 * f[i - 1] + f[i - 3]) % mod;
}
cout << f[n] << endl;
return 0;
}