问题描述
  小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。
  由于他们是好朋友,他们都在广场上装车的时候会聊天,他们想知道他们可以聊多长时间。
输入格式
  输入的第一行包含一个正整数n,表示时间段的数量。
  接下来n行每行两个数ai,bi,描述小H的各个装车的时间段。
  接下来n行每行两个数ci,di,描述小W的各个装车的时间段。
输出格式
  输出一行,一个正整数,表示两人可以聊多长时间。
样例输入
4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14
样例输出
3
数据规模和约定
  对于所有的评测用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,对于所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。

一开始的思路是:

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

import java.util.Scanner;

public class BuyVetab {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n*2];
int[] b = new int[n*2];
for (int i = 0; i < n*2; i++) {
a[i] = sc.nextInt();
b[i] = sc.nextInt();
}
// 取a,c最小值,b,d最大值
int secon = 0;
for (int i = 0; i < n; i++) {
int x = getMax(a[i], a[n+i]);
int y = getMin(b[i], b[n+i]);
if(y-x > 0){
secon += y-x;
}
}
System.out.println(secon);
} public static int getMin(int x, int y) {
if (x < y) {
return x;
} else {
return y;
}
} public static int getMax(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
}

再编辑:

修改过的JAVA代码:

import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//a数组表示开始的时间,b数组表示结束的时间
//a[0]~a[n-1]表示第一个人开始的时间,b[0]~b[n-1]表示第一个人结束的时间
//a[n]~a[2n-1]表示第二个人开始的时间,b[n]~b[2n-1]表示第二个人结束的时间
int[] a = new int[n * 2];
int[] b = new int[n * 2];
for (int i = 0; i < n * 2; i++) {
a[i] = sc.nextInt();
b[i] = sc.nextInt();
}
int secon = 0;
for (int i = 0; i < n; i++) {
for (int j = n; j < 2 * n; j++) {
if (Math.min(b[i], b[j]) > Math.max(a[i], a[j]))
secon += Math.min(b[i], b[j]) - Math.max(a[i], a[j]);
}
}
System.out.println(secon);
}
}

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

#include<iostream>
#include<vector>
#include<algorithm> using namespace std; struct BuyTime {
int start;
int end;
}; int main() {
int n;//共几段时间
cin >> n;
vector<BuyTime> v1, v2;
BuyTime bt;
for (int i = ; i < n; i++) {
cin >> bt.start >> bt.end;
v1.push_back(bt);
}
for (int i = ; i < n; i++) {
cin >> bt.start >> bt.end;
v2.push_back(bt);
}
int ans = ;
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
if (min(v1[i].end, v2[j].end) > max(v1[i].start, v2[j].start))
ans += min(v1[i].end, v2[j].end) - max(v1[i].start, v2[j].start);
}
} cout << ans << endl;
system("pause");
return ;
}

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

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

import java.util.Scanner;

public class 买菜 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] t = new int[1000000];
int count = 0; for (int i = 0; i < n * 2; i++) {
int a = input.nextInt();
int b = input.nextInt();
for (int j = a; j < b; j++)
t[j]++;
} for (int i : t)
if (i > 1)
count++; System.out.println(count);
}
}
---------------------
作者:AivenZ
来源:CSDN
原文:https://blog.csdn.net/AivenZhong/article/details/83343579
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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. shrio的知识储备

    博客讲解; shrio的知识储备 shrio的简单认识 笔记整理地址: Shrio.pdf 下载 Shrio理论.doc 下载 Shrio知识储备.doc  下载 Shrio的知识储备 (一)   S ...

  2. python 并发socketserver模块

    1.源码class 1.server类:处理链接 +------------+ | BaseServer | +------------+ | v +-----------+ +----------- ...

  3. AndroidUI多线程网络请求更新导致BUG

    昨天发现一个问题,以前做好的UI列表不用正常显示了,必须,下拉一下,才能加载内容,以前是页面自动加载第一屏幕的. 这个就不好了,只是给页面加了一个按钮啊,不应该造成这么大的问题. 按钮就是设置了一个位 ...

  4. Android根据URL下载文件保存到SD卡

    //下载具体操作 private void download() { try { URL url = new URL(downloadUrl); //打开连接 URLConnection conn = ...

  5. 京东原来你运用的这玩意,不错,我也要!! ContainerDNS

    转自社区 ContainerDNS 本文介绍的 DNS 命名为 ContainerDNS,作为京东商城软件定义数据中心的关键基础服务之一,具有以下特点: 分布式,高可用 自动发现服务域名 后端探活 易 ...

  6. Frequently Used Algo

    1. 链表 链表逆转 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* prev = NULL; w ...

  7. Python学习---迭代器学习1210

    可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator fun ...

  8. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. linux的pthread_self与gettid的返回值和开销的区别

    linux的pthread_self与gettid的返回值和开销的区别 linux的pthread_self与gettid的返回值和开销的区别 分类: 一些思考 2012-05-18 12:25 17 ...

  10. metasploit渗透测试笔记(内网渗透篇)

    x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...