CSP 买菜(含解析)

    科技2023-09-10  103

    C++实现

    思路:

    将各个时间段用数组存起来,包含头但是不包含尾。比如[1,3],在数组中,我们只把下标为1和2的数组元素设置为1,而不设置下标为3的元素。 当输入第一个人的时候,修改数组元素。 输入第二个人的时候,判断对应下标元素是否为1,便可知道二人时间是否重叠,也就是可以聊天的时间。

     

    代码

    #include <iostream> using namespace std; int main(int argc, char** argv) { int n; scanf("%d",&n); int start=0; int e=0; int count=0; // int arr[1000000]; int * arr = new int[1000000]; //输入第一个人的时间,修改数组元素 for(int i=0;i<n;i++){ scanf("%d %d",&start,&e); for(int j=start;j<e;j++){ arr[j]=1; } } //输入第二个人的时间,对应位置进行判断 for(int i=0;i<n;i++){ scanf("%d %d",&start,&e); for(int j=start;j<e;j++){ if(arr[j]==1){ count++; } } } printf("%d",count); return 0; }

     

    注意点

    由于数组长度较大,所以一般的创建数组方式是不行的,改用以下代码:

    int * arr = new int[1000000];

     

    相似题目

    CSP中,画图一题和该题相似,只是用的是二维数组。 戳这里:画图

    Processed: 0.021, SQL: 8