1. 问题描述
  2.   H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。
    具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]...[an,bn]在装车,对于小W来说有n个不相交的时间段[c1,d1],[c2,d2]...[cn,dn]在装车。
    其中,一个时间段[s, t]表示的是从时刻s到时刻t这段时间,时长为t-s
  3.   由于他们是好朋友,他们都在广场上装车的时候会聊天,他们想知道他们可以聊多长时间。
  4. 输入格式
  5.   输入的第一行包含一个正整数n,表示时间段的数量。
  6.   接下来n行每行两个数aibi,描述小H的各个装车的时间段。
  7.   接下来n行每行两个数cidi,描述小W的各个装车的时间段。
  8. 输出格式
  9.   输出一行,一个正整数,表示两人可以聊多长时间。
  10. 样例输入
  11. 4
  12. 1 3
  13. 5 6
  14. 9 13
  15. 14 15
  16. 2 4
  17. 5 7
  18. 10 11
  19. 13 14
  20. 样例输出
  21. 3
  22. 数据规模和约定
  23.   对于所有的评测用例,1 n 2000, ai < bi < ai+1ci < di < ci+1,对于所有的i(1 i n)有,1 ai, bi, ci, di 1000000

一开始的思路是:

也就是算出重合时间,代码如下,但是提交之后得到的分数是10分,尴尬 ̄□ ̄||,有大神帮忙看看,欢迎批评指正。问题在于没有考虑到一个人装车时间很长的情况

  1. import java.util.Scanner;
  2.  
  3. public class BuyVetab {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = sc.nextInt();
  7. int[] a = new int[n*2];
  8. int[] b = new int[n*2];
  9. for (int i = 0; i < n*2; i++) {
  10. a[i] = sc.nextInt();
  11. b[i] = sc.nextInt();
  12. }
  13. // 取a,c最小值,b,d最大值
  14. int secon = 0;
  15. for (int i = 0; i < n; i++) {
  16. int x = getMax(a[i], a[n+i]);
  17. int y = getMin(b[i], b[n+i]);
  18. if(y-x > 0){
  19. secon += y-x;
  20. }
  21. }
  22. System.out.println(secon);
  23. }
  24.  
  25. public static int getMin(int x, int y) {
  26. if (x < y) {
  27. return x;
  28. } else {
  29. return y;
  30. }
  31. }
  32.  
  33. public static int getMax(int x, int y) {
  34. if (x > y) {
  35. return x;
  36. } else {
  37. return y;
  38. }
  39. }
  40. }

再编辑:

修改过的JAVA代码:

  1. import java.util.Scanner;
  2.  
  3. public class Main{
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = sc.nextInt();
  7. //a数组表示开始的时间,b数组表示结束的时间
  8. //a[0]~a[n-1]表示第一个人开始的时间,b[0]~b[n-1]表示第一个人结束的时间
  9. //a[n]~a[2n-1]表示第二个人开始的时间,b[n]~b[2n-1]表示第二个人结束的时间
  10. int[] a = new int[n * 2];
  11. int[] b = new int[n * 2];
  12. for (int i = 0; i < n * 2; i++) {
  13. a[i] = sc.nextInt();
  14. b[i] = sc.nextInt();
  15. }
  16. int secon = 0;
  17. for (int i = 0; i < n; i++) {
  18. for (int j = n; j < 2 * n; j++) {
  19. if (Math.min(b[i], b[j]) > Math.max(a[i], a[j]))
  20. secon += Math.min(b[i], b[j]) - Math.max(a[i], a[j]);
  21. }
  22. }
  23. System.out.println(secon);
  24. }
  25. }

用C++实现的,思路还是如上,,只是对开始时间和结束时间进行了封装,更便于理解:

  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. struct BuyTime {
  8. int start;
  9. int end;
  10. };
  11.  
  12. int main() {
  13. int n;//共几段时间
  14. cin >> n;
  15. vector<BuyTime> v1, v2;
  16. BuyTime bt;
  17. for (int i = ; i < n; i++) {
  18. cin >> bt.start >> bt.end;
  19. v1.push_back(bt);
  20. }
  21. for (int i = ; i < n; i++) {
  22. cin >> bt.start >> bt.end;
  23. v2.push_back(bt);
  24. }
  25. int ans = ;
  26. for (int i = ; i < n; i++) {
  27. for (int j = ; j < n; j++) {
  28. if (min(v1[i].end, v2[j].end) > max(v1[i].start, v2[j].start))
  29. ans += min(v1[i].end, v2[j].end) - max(v1[i].start, v2[j].start);
  30. }
  31. }
  32.  
  33. cout << ans << endl;
  34. system("pause");
  35. return ;
  36. }

然后就上网搜别人的解决思路,感谢互联网,感谢大神的思路。我突然感觉到了代码的魅力。

贴一下大神的解决思路和代码吧。

  1. import java.util.Scanner;
  2.  
  3. public class 买菜 {
  4. public static void main(String[] args) {
  5. Scanner input = new Scanner(System.in);
  6. int n = input.nextInt();
  7. int[] t = new int[1000000];
  8. int count = 0;
  9.  
  10. for (int i = 0; i < n * 2; i++) {
  11. int a = input.nextInt();
  12. int b = input.nextInt();
  13. for (int j = a; j < b; j++)
  14. t[j]++;
  15. }
  16.  
  17. for (int i : t)
  18. if (i > 1)
  19. count++;
  20.  
  21. System.out.println(count);
  22. }
  23. }
  24. ---------------------
  25. 作者:AivenZ
  26. 来源:CSDN
  27. 原文:https://blog.csdn.net/AivenZhong/article/details/83343579
  28. 版权声明:本文为博主原创文章,转载请附上博文链接!

代码简洁,思路流畅,让我这个菜逼深深受教。

CCF认证201809-2买菜的更多相关文章

  1. CCF计算机职业资格认证考试 201809-2 买菜

    以下内容过于幼稚,请大佬自觉绕道.. 题目描述: 时间限制:1.0s内存限制:256.0MB问题描述:问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁 ...

  2. CCF CSP 201809-2 买菜

    题目链接:http://118.190.20.162/view.page?gpid=T78 问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广 ...

  3. 需求:promise执行买菜做饭过程

    需求:promise执行买菜做饭过程 1.买菜 2.洗菜 3.做饭 4.吃饭 <!DOCTYPE html> <html lang="en"> <he ...

  4. ccf-201809-2 买菜

    问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车.具体的,对于小H来说有n个不相交的时间段 ...

  5. csp201809-2 买菜

    问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车.具体的,对于小H来说有n个不相交的时间段 ...

  6. csp 201809-2 买菜

    两人在一段时间买菜装车,装车时会聊天,求聊天的时长. 使用数组记录,求重叠部分即可 代码: #include<iostream> #include<string> #inclu ...

  7. CCF认证历年试题

    CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...

  8. 小明种苹果(续)第十七次CCF认证

    小明种苹果(续)第十七次CCF认证 题目 原题链接 ](http://118.190.20.162/view.page?gpid=T93) 很高心,在现在CCF CSP可以下载自己当时的答卷了,也就是 ...

  9. ypoj 2286 佳佳买菜

    题目名称:佳佳买菜 描述 佳佳是我们的ACM社团的副社长,她感觉得自己没存在感,so-由于实验室要聚餐了,佳佳决定买点菜,来做菜给大家吃.佳佳喜欢吃娃娃菜,于是她来到买菜的地方.佳佳:我要10斤娃娃菜 ...

随机推荐

  1. 洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)

    题意 题目链接 Sol 这题打死我也不会想到后缀数组的,应该会全程想AC自动机之类的吧 但知道这题能用后缀数组做之后应该就不是那么难了 首先把\(S\)和\(S0\)拼到一起跑,求出Height数组 ...

  2. less教程

    平时在工作中,偶尔会遇到老大让你修改原来写好的样式,如果修改的多的话,修改起来是非常麻烦的.他不像js一样,定义变量.函数,需要修改某些值,直接修改方法就行了.less的出现,恰恰帮我们解决了这个问题 ...

  3. eclipse 乱码问题总结

    Eclipse 的控制台必须用GBK编码.所以条件1和条件4必须同时满足否则运行的还是乱码.才能保证不是乱码. 条件1,Window  | Preferences  | Workspace  |  T ...

  4. zabbix_3.0安装部署与中文支持

    Zabbix 3.0界面焕然一新,一改10多年的老面孔,alpha4的更新具体记录如下:http://www.zabbix.com/rn3.0.0alpha4.php What's New in 3. ...

  5. [翻译] MagicPie

    MagicPie Powerful pie layer for creating your own pie view. PieLayer provide great animation with si ...

  6. Eclipse导出可运行的jar包并运行

    https://blog.csdn.net/kpchen_0508/article/details/49275407 程序运行的第二种方式:

  7. Android 通过触摸动态地在屏幕上画矩形

    需求概述: 在屏幕上用手指画出一个区域,返回所圈的区域坐标. 技术实现: 自定义View,设置画笔及对应参数,在onTouchEvent()回调函数里,对触摸事件进行判断.画出矩形图形. 代码: 自定 ...

  8. 为Linux设置IPTables防火墙

    我们 来讨论一下如何为你的CentOS 服务器来设置简单的防火墙. 这里我们以DigitalOcean的CentOS 6 VPS为基础来讨论的,同样也适用于 阿里云上其他类型的LINUX系统. (阿里 ...

  9. January 04 2017 Week 1st Wednesday

    Nothing happens unless first a dream. 一切始于梦想. I have a dream, one day I can be the expert in this fi ...

  10. ab 压测工具使用

    转自:http://www.cnblogs.com/lemtree/articles/1676641.html 就是APACHE自带的测试工具AB(apache benchmark).在APACHE的 ...