问题描述
  小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. JQuery图片加载显示loading和加载失败默认图片

    在很多时候我们需要用到图片加载功能,在网上搜资料后就想为了以后使用方便重新整理了下,结果如图: 最后一张是加载失败显示的图片,没找到合适的图片,先用他顶替. 页面引用 <div class=&q ...

  2. 洛谷P3939 数颜色(二分 vector)

    题意 题目链接 Sol 直接拿vector维护每种颜色的出现位置,然后二分一下. #include<bits/stdc++.h> using namespace std; const in ...

  3. BZOJ4602: [Sdoi2016]齿轮(并查集 启发式合并)

    题意 题目链接 Sol 和cc的一道题很像啊 对于初始的\(N\)个点,每加一条限制实际上就是合并了两个联通块. 那么我们预处理出\(val[i]\)表示的是\(i\)节点所在的联通块根节点转了\(1 ...

  4. 03--CSS布局设置

    一 盒模型 盒模型 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型有两种:标准模 ...

  5. C++学习笔记(9)----关于变量和数组大小的一道容易出错的面试题

    一道容易出错的C++笔试题 求下面代码的输出内容: int main(int argc,char* argv[]) { char str1[]="Hello"; char* str ...

  6. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  7. 基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能

    思路: 1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳): 2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下: 3.然后前端,上传附件成功后, ...

  8. 初识WCF2

    参照: http://blog.csdn.net/songyefei/article/details/7371571 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾 ...

  9. asp.net生成PDF文件(一)

    这个是例子是网上淘来的,哈哈,很有用的! 首先要到网上下载itextsharp.dll,然后添加引用,主程序如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  10. Visual Studio强行修改运行平台和注意事项

    默认情况下,会发现项目属性中只有一个Any CPU可供选择,无法修改运行平台. 解决方法如下: 右键“解决方案”,选择“属性”,此时发现每一个项目的平台依然只有Any CPU,点击右上角“配置管理器” ...