UVa:10790 - How Many Points of Intersection?

数学推导即可。。。(等差数列求和)

刚开始WA了一次,样例过了,但没注意到int型不能隐性转换为long long型(不知道为什么,求解!??!),强制转换后AC

#include<stdio.h>
int main(){
    long long sum;
    int a, b;
    int t = 1;
    while(scanf("%d%d", &a, &b) != EOF){
        if(!a && !b)
            break;
        printf("Case %d: %lld\n", t++, (long long)a * (a - 1) * b * (b - 1) / 4);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!根据您的需求背景,我可以提供以下Java代码示例来实现您的需求: ```java import java.time.LocalTime; import java.util.ArrayList; import java.util.List; public class WorkTimeScheduler { public static void main(String[] args) { String dailyWorkTime = "08:00-12:00;13:00-17:00;18:00-21:00"; String availableWorkTime = "08:00-12:00;14:00-17:00;19:00-22:00"; int requiredWorkTime = 120; List<TimeRange> dailyTimeRanges = parseTimeRanges(dailyWorkTime); List<TimeRange> availableTimeRanges = parseTimeRanges(availableWorkTime); TimeRange earliestAvailableTimeRange = getEarliestAvailableTimeRange(dailyTimeRanges, availableTimeRanges, requiredWorkTime); if (earliestAvailableTimeRange != null) { System.out.println("The earliest available time range is: " + earliestAvailableTimeRange.toString()); } else { System.out.println("No available time range satisfies the required work time."); } } public static List<TimeRange> parseTimeRanges(String timeRangesStr) { List<TimeRange> timeRanges = new ArrayList<>(); String[] rangeStrs = timeRangesStr.split(";"); for (String rangeStr : rangeStrs) { String[] times = rangeStr.split("-"); LocalTime startTime = LocalTime.parse(times[0]); LocalTime endTime = LocalTime.parse(times[1]); timeRanges.add(new TimeRange(startTime, endTime)); } return timeRanges; } public static TimeRange getEarliestAvailableTimeRange(List<TimeRange> dailyTimeRanges, List<TimeRange> availableTimeRanges, int requiredWorkTime) { for (TimeRange availableTimeRange : availableTimeRanges) { for (TimeRange dailyTimeRange : dailyTimeRanges) { TimeRange intersection = dailyTimeRange.getIntersection(availableTimeRange); if (intersection != null && intersection.getDuration() >= requiredWorkTime) { return intersection; } } } return null; } } class TimeRange { private final LocalTime startTime; private final LocalTime endTime; public TimeRange(LocalTime startTime, LocalTime endTime) { this.startTime = startTime; this.endTime = endTime; } public LocalTime getStartTime() { return startTime; } public LocalTime getEndTime() { return endTime; } public int getDuration() { return (int) startTime.until(endTime, java.time.temporal.ChronoUnit.MINUTES); } public TimeRange getIntersection(TimeRange other) { LocalTime latestStartTime = startTime.isAfter(other.getStartTime()) ? startTime : other.getStartTime(); LocalTime earliestEndTime = endTime.isBefore(other.getEndTime()) ? endTime : other.getEndTime(); if (latestStartTime.isBefore(earliestEndTime)) { return new TimeRange(latestStartTime, earliestEndTime); } else { return null; } } @Override public String toString() { return startTime.toString() + "-" + endTime.toString(); } } ``` 解释一下代码的实现思路: 1. `parseTimeRanges` 方法用于将时间段字符串解析成 `TimeRange` 对象列表。 2. `getEarliestAvailableTimeRange` 方法遍历每个可用时间段和每个日常工作时间段,找到它们的交集,并判断交集是否满足需要的工作时间。如果找到了满足条件的交集,就返回它;否则返回 null。 3. `TimeRange` 类表示一个时间段,包括起始时间和结束时间。它提供了计算时间段时长、计算时间段交集的方法。 您可以根据自己的需求调整代码,并进行测试。希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值