csp练题记录(C语言,编译器dev c++)201809-2 买菜

csp练题记录(C语言,编译器dev c++)201809-2 买菜

一、题目描述

在这里插入图片描述

二、思路分析

输入数据分析:看数据规模和约定,所以设了两个二维数组h[2][2000],w[2][2000]来存储二人买菜的时间,考虑到数字多,数值大,总时间不妨设成long long int型的。
在这里插入图片描述
采用两个for循环来遍历两个数组:外层循环用来遍历h的买菜时间(循环变量i),内层循环用来遍历w的买菜时间(循环变量j)。这样,每次判断h[i]和w[j]的关系:(在数轴上就很明了),如上图:当w的最大比h的最小小和w的最小比h的最大时(上图中对角线),说明二者买菜时间没有交集,不进行下一步操作,直接一个continue继续循环。当二者有交集时,用取并集的思想:开始碰头时间为h,w中最大的一个,结束会面时间为h,w中最小的一个。二者相减就是此次可以闲聊的时间,总时间的话就一直累加,最后输出。

三、代码

#include<stdio.h>
int main()
{
 int n,h[2][2000],w[2][2000];
 long long int time=0;
 scanf("%d",&n);
 int i,j,start,end;
 for(i=0;i<n;i++)
 scanf("%d %d",&h[0][i],&h[1][i]);
 for(i=0;i<n;i++)
 scanf("%d %d",&w[0][i],&w[1][i]);
 for(i=0;i<n;i++)//遍历h 
 {
  for(j=0;j<n;j++)//遍历w 
  {
   if(w[0][j]>h[1][i]||w[1][j]<h[0][i])continue;
   start=h[0][i]>w[0][j]?h[0][i]:w[0][j];
   end=h[1][i]>w[1][j]?w[1][j]:h[1][i];
   time=time+end-start;
  }
 }
 printf("%lld",time);
 return 0;
}

四、反思总结

关键在于分析题目,不能把答案凑出来能跑通它的例子就觉得万事大吉了,例子只是最基本要求,涉及到的数据也只是其中的一小类(不一定能反应题目所求的所有类型)。开始的时候我就很粗心,差不多得了,跑通了例子就行,0分让我清醒。分析清题目涉及到的数据之间的相互关系很重要!!!(此处复读机开启=_=||)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值