L

来源:互联网 发布:深思考人工智能北京 编辑:程序博客网 时间:2024/05/17 09:26


                                                                            L - 矩形游戏

题目描述
给出一个无限的二维网格,左下角的单元格被称为(1,1)。 所有单元格最初都表示为零值。我们来玩个游戏。游戏由N个步骤组成,其中每个步骤都有两个整数a和b。 满足1≤u≤a和1≤v≤b的坐标(u,v)中的每个单元的值增加1。在N个这样的步骤之后,如果X是所有单元格中最大的数,您可以计算出网格中X的数量吗?
输入
第一行输入包含一个整数N。接下来N行,每行包含由单个空格分隔的两个整数a和b。
输出
输出一个整数,表示X的数量。
数据范围
1 ≤ N ≤ 100 1 ≤ a ≤ 10^6 1 ≤ b ≤ 10^6
Input
32 33 74 1
Output
2
Hint
例如样例1中:假设这个网格是4*7的。还没有进行操作时:0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0 第一次操作后:0 0 0 0 0 0 00 0 0 0 0 0 01 1 1 0 0 0 01 1 1 0 0 0 0 第二次操作后:0 0 0 0 0 0 01 1 1 1 1 1 12 2 2 1 1 1 12 2 2 1 1 1 1 最后一次操作后网格是这样的:1 0 0 0 0 0 02 1 1 1 1 1 13 2 2 1 1 1 13 2 2 1 1 1 1 网格中最大的数为3, 3的数量为2,所以输出2。

这题其实很简单,把两列数字储存在两个数组里面,然后就排一下序,不过注意考虑是否0的情况,如果有0的话,不是没有最大数,而是最大数成了次大数,下面是我的代码:

#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;long long a[10000000],b[1000000];int main(){    int n;    long long i;    scanf("%d",&n);    for(i=0;i<n;i++)    scanf("%lld%lld",&a[i],&b[i]);    sort(a,a+n);    sort(b,b+n);    if(a[0]==0)    printf("%lld",a[1]*b[0]);    if(b[0]==0)    printf("%lld",a[0]*b[1]);    else    printf("%lld",a[0]*b[0]);return 0;}



原创粉丝点击