CCF认证201809-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。
由于他们是好朋友,他们都在广场上装车的时候会聊天,他们想知道他们可以聊多长时间。
输入格式
输入的第一行包含一个正整数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买菜的更多相关文章
- CCF计算机职业资格认证考试 201809-2 买菜
以下内容过于幼稚,请大佬自觉绕道.. 题目描述: 时间限制:1.0s内存限制:256.0MB问题描述:问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁 ...
- CCF CSP 201809-2 买菜
题目链接:http://118.190.20.162/view.page?gpid=T78 问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广 ...
- 需求:promise执行买菜做饭过程
需求:promise执行买菜做饭过程 1.买菜 2.洗菜 3.做饭 4.吃饭 <!DOCTYPE html> <html lang="en"> <he ...
- ccf-201809-2 买菜
问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车.具体的,对于小H来说有n个不相交的时间段 ...
- csp201809-2 买菜
问题描述 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车.具体的,对于小H来说有n个不相交的时间段 ...
- csp 201809-2 买菜
两人在一段时间买菜装车,装车时会聊天,求聊天的时长. 使用数组记录,求重叠部分即可 代码: #include<iostream> #include<string> #inclu ...
- CCF认证历年试题
CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...
- 小明种苹果(续)第十七次CCF认证
小明种苹果(续)第十七次CCF认证 题目 原题链接 ](http://118.190.20.162/view.page?gpid=T93) 很高心,在现在CCF CSP可以下载自己当时的答卷了,也就是 ...
- ypoj 2286 佳佳买菜
题目名称:佳佳买菜 描述 佳佳是我们的ACM社团的副社长,她感觉得自己没存在感,so-由于实验室要聚餐了,佳佳决定买点菜,来做菜给大家吃.佳佳喜欢吃娃娃菜,于是她来到买菜的地方.佳佳:我要10斤娃娃菜 ...
随机推荐
- 洛谷P3384 树链剖分
如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x ...
- Myeclipse中设置jsp页面的默认编码格式
在MyEclispe中创建Jsp页面,Jsp页面的默认编码是“ISO-8859-1”,如下图所示: 在这种编码下编写中文是没有办法保存Jsp页面的,会出现如下的错误提示: 因此可以设置Jsp默认的编码 ...
- Node.js 的安装
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 的运行环境,简单的说就是运行在服务端的 JavaScript.所以学起来还是比较容易接受的. Node.js 使用事件驱动 ...
- ioctl
在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值. cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 ...
- 下载 github 项目文件到本地方法
下载 github 项目文件到本地方法 本篇终极,收集 3 种方法 最厉害 666 的方法 直接访问网站: 操作如下: 本地工具版下载方法 首先需要下载 git 客户端 我就不转载了,上面有客户端的使 ...
- Linux-文件目录命令
黑色 代表是普通的文件 蓝色 代表是目录(文件夹) 紫色 代表是图片文件 绿色 代表是可以执行的文件(脚本文件)-->存放linux命令的 红色 代表是压缩文件 clear:清屏pwd:显示当前 ...
- 京东原来你运用的这玩意,不错,我也要!! ContainerDNS
转自社区 ContainerDNS 本文介绍的 DNS 命名为 ContainerDNS,作为京东商城软件定义数据中心的关键基础服务之一,具有以下特点: 分布式,高可用 自动发现服务域名 后端探活 易 ...
- Windows Socket和Linux Socket编程的区别 ZZ
socket相关程序从Windows移植到Linux下需要注意的: 1)头文件 Windows下winsock.h/winsock2.h Linux下sys/socket.h 错误处理:errno.h ...
- Google官方教程之Selling In-app Products
1.原文链接[需FQ]:http://developer.android.com/training/in-app-billing/index.html 2.平时对于英文文档都是大概读一下,现在翻译文章 ...
- Django路由系统---url无命名分组
django重点之url无命名分组[参数有顺序要求] settigs.py:增加STATICFILES_DIRS静态资源路径配置,名称为创建的文件夹名称 'DIRS': [os.path.join(B ...