杭电Hd 2037 今年暑假不AC

本文介绍了一种基于贪心算法的活动排序问题解决方案,通过输入多个活动的开始时间和结束时间,利用结束时间进行排序,从而找出能参与的最大数量的不冲突活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一道活动排序题,属于贪心算法。

import java.util.Scanner;
public class Hd2037 {
public static void main(String[] args){
 Scanner sc=new Scanner (System.in);
 while(sc.hasNext()){
 int n=sc.nextInt();
 if(n==0) break;
 int []a=new int[n];
 int []b=new int[n];
 for(int i=0;i<n;i++){
  a[i]=sc.nextInt(); //记录开始时间
  b[i]=sc.nextInt(); //记录结束时间
 }
//按结束时间降序排序
 for(int i=0;i<n;i++){
  for(int j=i+1;j<n;j++){
   if(b[i]>b[j]){
    int temp=b[j];
    b[j]=b[i];
    b[i]=temp;
    
    temp=a[j];
    a[j]=a[i];
    a[i]=temp;
   }
  }
 }
int k=0;
int count=0; //记录能看上的活动个数
for(int i=1;i<n;i++){
 if(a[i]>=b[k]){ //下一个活动的开始时间>上一个活动的结束时间
  k=i;
  count++;
 }
}
System.out.println((count+1)); 
}
}
}

 

### 关于杭电OJ 2037题的解法 杭电OJ上的题目通常涉及基础算法和数据结构的应用。对于杭电OJ 2037题,虽然未直接提供具体描述或样例输入输出,但从其编号范围来看,该题可能属于较为简单的入门级编程练习[^1]。 #### 题目分析 假设杭电OJ 2037是一道典型的日期计算类问题(基于常见题型推测)。这类问题一般要求根据给定年月日判断某一天是这一年的第几天。解决此类问题的关键在于考虑闰年和平年的差异以及每个月份天数的同。 以下是针对此类型的通用解决方案: ```cpp #include <iostream> using namespace std; int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool isLeapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return true; else return false; } int main() { int testCases; cin >> testCases; while(testCases--) { int year, month, day; cin >> year >> month >> day; bool leap = isLeapYear(year); if(leap) daysInMonth[1] = 29; // 修改二月份天数 int totalDays = 0; for(int i = 0; i < month - 1; ++i){ totalDays += daysInMonth[i]; } totalDays += day; cout << totalDays << endl; } return 0; } ``` 上述代码实现了对多个测试案例的支持,并能够正确处理闰年情况下的特殊逻辑。 #### 进一步说明 如果杭电OJ 2037并非日期计算相关,则需进一步查阅具体的题目描述来调整策略。例如,如果是字符串操作或者简单算术运算等问题,可以参考其他相似题目的思路[^2]^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值