本文主要是介绍acwing周赛115第二题-奶牛照相,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
5132. 奶牛照相 - AcWing题库
约翰的农场有 n 头奶牛,编号 1∼n。
其中,第 i 头奶牛的宽度为 wi,高度为 hi,
有一天,它们聚餐后决定拍照留念。
关于拍照的描述如下:
- 它们一共拍了 n 张照片,其中第 i 张照片由第 i 头奶牛给其它所有奶牛拍摄,即照片中包含除了奶牛 i 以外的所有奶牛。
- 在拍照时,所有被拍摄的奶牛站成一排,拍出的照片呈矩形。
- 每张照片的尺寸大小为 W×H,其中 W 为照片中所有奶牛的宽度之和,H 为照片中最高的奶牛的高度。
请你计算并输出每张照片的面积(W×H的值)。
输入格式
第一行包含整数 n,表示共有 n 头奶牛。
接下来 n 行,其中第 i 行包含两个整数 wi,hi,表示第 i 头奶牛的宽度和高度。
输出格式
输出共一行,n个整数,其中第 i 个整数表示第 i 张照片的面积。
注意,第 i 张照片包含除了奶牛 i 以外的所有奶牛。
数据范围
前 33 个测试点满足 2≤n≤3。
所有测试点满足 2≤n≤2×105,1≤wi≤10,1≤hi≤1000。输入样例1:
3 1 10 5 5 10 1
输出样例1:
75 110 60
输入样例2:
3 2 1 1 2 2 1
输出样例2:
6 4 6
主要是处理出最大值 max1 和第二大值 max2,然后遍历,当前高度不等于 max1 的时候,就是宽度成 max1,高高度等于 max1 的时候,就是宽度成 max2
AC code:
#include<bits/stdc++.h>
using namespace std;
int h[200010];
int w[200010];
struct s {int w, h, x;
} arr[200010];
int n, ww = -1, hh = -1;int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> arr[i].w;cin >> arr[i].h;arr[i].x = i;w[i] = w[i - 1] + arr[i].w;h[i] = arr[i].h;}sort(h + 1, 1 + h + n);for (int i = 1; i <= n; i++) {w[i] = w[n] - arr[i].w;}for (int i = 1; i <= n; i++) {int a = arr[i].h;int b = w[i];if (arr[i].h != h[n]) {cout << w[i]*h[n] << " ";} else {cout << w[i]*h[n - 1] << " ";}}
}
这篇关于acwing周赛115第二题-奶牛照相的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!