1. 图像叠加
在图像应用程序中经常要将2个图层进行叠加,从而产生各种瑰丽的合成效果。现在请你实现常见的线性光叠加模式。
线性光叠加模式公式:C = A + 2B - 255;C < 0 时,取 C = 0;C > 255 时,取 C = 255。
在公式中 A 代表下面图层的颜色值,也称为基色;B 代表上面图层的颜色值,也成为混合色;C 代表混合图层的颜色值,也称为结果色。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
第一行输入2个数字 M N,表示输入图片的大小(M、N 小于 1024)。
之后输入 M 行数据为 A 图像的数据内容,每行 N 个数字,表示该行的像素值。
之后继续输入 M 行数据为 B 图像的数据内容,每行 N 个数字,表示该行的像素值。
输出描述:
M 行数据,每行 N 个数字,表示结果图片像素值。
示例1
输入例子:
2 2 100 200 50 50 50 50 100 100
输出例子:
0 45 0 0
示例2
输入例子:
2 3 23 172 238 238 174 151 22 117 230 230 237 141
输出例子:
0 151 255 255 255 178
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <iostream> #include <vector> using namespace std;
int M, N; int a[1024][1024]; int b[1024][1024]; int res[1024][1024];
int main() { cin >> M >> N; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { cin >> a[i][j]; } }
for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { cin >> b[i][j]; res[i][j] = a[i][j] + 2 * b[i][j] - 255; if (res[i][j] < 0) res[i][j] = 0; if (res[i][j] > 255) res[i][j] = 255; } }
for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { cout << res[i][j] << " "; } cout << endl; } }
|
- 直角三角形的个数
二维平面直角坐标系中有 N 个整型坐标点 (x1, y1), (x2, y2), …, (xN, yN),任意三个点都可能构成一个三角形,计算这些三角形中直角三角形的个数。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
输入描述:
输入有两行:
第一行为 N,3 ≤ N ≤ 256。
第二行为输入 N 个双字节整型坐标点,共 2N 个数据,以空格分隔横纵坐标及不同的点,x1 y1 x2 y2 … xn yn… xN yN。
输出描述:
输出直角三角形个数。
示例1
输入例子:
20
0 0 0 3 1 2 3 4 5 6 7 8 1 4 2 4 3 5 5 0 5 5 2 0 2 2 3 0 3 3 4 5 6 1 3 7 4 0 5 2
输出例子:
165
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <iostream> using namespace std;
int N, cnt = 0; int x[256]; int y[256];
int distSquared(int i, int j) { return (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]); }
int main() { cin >> N;
for (int i = 0; i < N; i++) { cin >> x[i] >> y[i]; }
for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { for (int k = j + 1; k < N; k++) { int a2 = distSquared(i, j); int b2 = distSquared(j, k); int c2 = distSquared(k, i); if (a2 + b2 == c2 || a2 + c2 == b2 || b2 + c2 == a2) { cnt++; } } } } cout << cnt; return 0; }
|
评论