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斤娃娃菜 ...
随机推荐
- 洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
题意 题目链接 Sol 这题打死我也不会想到后缀数组的,应该会全程想AC自动机之类的吧 但知道这题能用后缀数组做之后应该就不是那么难了 首先把\(S\)和\(S0\)拼到一起跑,求出Height数组 ...
- less教程
平时在工作中,偶尔会遇到老大让你修改原来写好的样式,如果修改的多的话,修改起来是非常麻烦的.他不像js一样,定义变量.函数,需要修改某些值,直接修改方法就行了.less的出现,恰恰帮我们解决了这个问题 ...
- eclipse 乱码问题总结
Eclipse 的控制台必须用GBK编码.所以条件1和条件4必须同时满足否则运行的还是乱码.才能保证不是乱码. 条件1,Window | Preferences | Workspace | T ...
- zabbix_3.0安装部署与中文支持
Zabbix 3.0界面焕然一新,一改10多年的老面孔,alpha4的更新具体记录如下:http://www.zabbix.com/rn3.0.0alpha4.php What's New in 3. ...
- [翻译] MagicPie
MagicPie Powerful pie layer for creating your own pie view. PieLayer provide great animation with si ...
- Eclipse导出可运行的jar包并运行
https://blog.csdn.net/kpchen_0508/article/details/49275407 程序运行的第二种方式:
- Android 通过触摸动态地在屏幕上画矩形
需求概述: 在屏幕上用手指画出一个区域,返回所圈的区域坐标. 技术实现: 自定义View,设置画笔及对应参数,在onTouchEvent()回调函数里,对触摸事件进行判断.画出矩形图形. 代码: 自定 ...
- 为Linux设置IPTables防火墙
我们 来讨论一下如何为你的CentOS 服务器来设置简单的防火墙. 这里我们以DigitalOcean的CentOS 6 VPS为基础来讨论的,同样也适用于 阿里云上其他类型的LINUX系统. (阿里 ...
- 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 ...
- ab 压测工具使用
转自:http://www.cnblogs.com/lemtree/articles/1676641.html 就是APACHE自带的测试工具AB(apache benchmark).在APACHE的 ...