P1387 最大正方形
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, m, ans = 0;
int arr[105][105];
int sum[105][105];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> arr[i][j];
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + arr[i][j];
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 0; k <= min(n - i, m - j ); k++) {
if (sum[i + k][j + k] - sum[i - 1][j + k] - sum[i + k][j - 1] + sum[i - 1][j - 1] == (k + 1) * (k + 1)) {
ans = max(ans, k + 1);
}
}
}
}
cout << ans;
return 0;
}
P3397 地毯
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n, m, arr[1005][1005], ans[1005][1005];
int main() {
cin >> n >> m;
int x1, y1, x2, y2;
for (int i = 1; i <= m; i++) {
cin >> x1 >> y1 >> x2 >> y2;
for (int j = x1; j <= x2; j++) {
for (int k = y1; k <= y2; k++) {
ans[j][k]++;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << ans[i][j] << ' ';
}
cout << endl;
}
return 0;
}
P2280 [HNOI2003] 激光炸弹
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, s[5010][5010];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i ++) {
int x, y, v;
cin >> x >> y >> v;
s[x + 1][y + 1] += v;
}
int N = 5001;
for (int i = 1; i <= N; i ++)
for (int j = 1; j <= N; j ++)
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + s[i][j];
int ans = 0;
for (int i = m; i <= N; i ++)
for (int j = m; j <= N; j ++) {
int num = s[i][j] - s[i - m][j] - s[i][j - m] + s[i - m][j - m];
ans = max(ans, num);
}
cout << ans << endl;
return 0;
}
P4552 [Poetize6] IncDec Sequence
很有意思的一道题,解出来很有成就感
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll n;
ll sum[100005], arr[100005];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> sum[i];
arr[i] = sum[i] - sum[i - 1];
}
ll sum1 = 0, sum2 = 0;
for (int i = 2; i <= n; i++) {
if (arr[i] > 0) {
sum1 += arr[i];
}else{
sum2 -= arr[i];
}
}
ll ans = max(sum1, sum2);
ll cat = abs(sum1 - sum2) + 1;
cout << ans << endl << cat << endl;
return 0;
}
P1219 [USACO1.5] 八皇后 Checker Challenge
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int a[100], b[100], c[100], d[100];
int total;
int n;
void print() {
if (total <= 2) {
for (int k = 1; k <= n; k++)
cout << a[k] << " ";
cout << endl;
}
total++;
}
void queen(int i) {
if (i > n) {
print();
return;
} else {
for (int j = 1; j <= n; j++) {
if ((!b[j]) && (!c[i + j]) && (!d[i - j + n])) { //如果没有皇后占领,执行以下程序
a[i] = j;
b[j] = 1;
c[i + j] = 1;
d[i - j + n] = 1;
queen(i + 1);
b[j] = 0;
c[i + j] = 0;
d[i - j + n] = 0;
}
}
}
return;
}
int main() {
cin >> n;
queen(1);
cout << total;
return 0;
}