本文主要是介绍蘑菇街2016校园招聘——聊天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
import java.util.Scanner;/*** <p>* ClassName:Solution* </p>* <p/>* Description:求小菇合适的起床时间*<pre>* Scanner cin = new Scanner(System.in);* while (cin.hasNextInt()) {}//正确* </pre>* 写* <pre>* while(true){}//报错* </pre>* </P>** @author sunnylinner*/public class Solution {private static void isLegal(int num, int flag) {//flag为0,判断[1,50],flag为1,判断[0,1000]if (flag==0) {if (!(1 <= num && num <= 50)) {//数据非法System.exit(0);}} else {if (!(0 <= num && num <= 1000)) {//数据非法System.exit(0);}}}public static void main(String[] args) {Scanner cin = new Scanner(System.in);while (cin.hasNextInt()) {int p = 0, q = 0, l = 0, r = 0;p = cin.nextInt();isLegal(p, 0);q = cin.nextInt();isLegal(q, 0);l = cin.nextInt();isLegal(l, 1);r = cin.nextInt();isLegal(r, 1);//检测输入数据是否有误int[] time_A_B = new int[p * 2];//标识小蘑的时间int[] time_C_D = new int[q * 2];//标识小菇的时间for (int i = 0; i < time_A_B.length ; i++) {//接收p行的数据,每一行都是一个时间对int temp = cin.nextInt();isLegal(temp, 1);time_A_B[i] = temp;}for (int i = 0; i < time_C_D.length ; i++) {//接收q行的数据,每一行都是一个时间对int temp = cin.nextInt();isLegal(temp, 1);time_C_D[i] = temp;}int count = 0;//count表示小菇能有多少个合适的起床时间begin:for (int t = l; t <= r; t++) {for (int i = 0; i < time_A_B.length; i += 2) {for (int j = 0; j < time_C_D.length; j += 2) {if (!(time_C_D[j] + t > time_A_B[i + 1] || time_C_D[j + 1] + t < time_A_B[i])) {count++;continue begin;}}}}System.out.println(count);}}
}
/*** 解题思路:* 1.小蘑的时间假设为[a,b],小菇的时间假设是[c+t,d+t],小菇起床的时间是t∈[l,r]* 2.那么当"a < b < (c+t) < (d+t)"或者"(c+t) < (d+t) < a < b"的情况时,小蘑和小菇无法聊天,由题目条件已知"a < b"和"c < d",那么推出"(c+t) < (d+t)"* 3.所以仅仅当"b < (c+t)"或者"(d+t) < a"时无法聊天,其余情况都是可以聊天的*/
解题思路:
- 小蘑的时间假设为
[a,b]
,小菇的时间假设是[c+t,d+t]
,小菇起床的时间是t∈[l,r]
- 那么当
"a < b < (c+t) < (d+t)"
或者"(c+t) < (d+t) < a < b"
的情况时,小蘑和小菇无法聊天,由题目条件已知"a < b"
和"c < d"
,那么推出"(c+t) < (d+t)"
- 所以仅仅当
"b < (c+t)"
或者"(d+t) < a"
时无法聊天,其余情况都是可以聊天的
这篇关于蘑菇街2016校园招聘——聊天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!