2 条题解

  • 1
    @ 2025-9-27 21:39:13

    首先可以看到 @ 的题解,是否感到不理解?这里有更简单的方案

    这道题是一种排序,排序过程中需要让两个数据“绑”在一块,可能需要 int nums[n][2] (同时交换),或者struct结构体,或者pair之类的

    在你思考怎么处理两个日期之间的关系的时候不难发现,咱们可以让月份和号这两个数据合并在一起,如何呢?

    点击展开提示

    时间戳=月份*100+号

    然后直接排序时间戳即可,再拆开即可(通过/100和%100)

    cpp

    const int N=1e6+10;
    int t[N];
    
    void eachT() {
        //读取
        int n,x,y; cin>>n;
        for(int i=1;i<=n;++i){
            cin>>x>>y;
            t[i]=x*100+y;
        }
    
        //提示:编辑区 ctrl+/ 可以取消注释
        
        //cpp排序
        // sort(t+1,t+1+n);
        
        //冒泡排序
        // for(int i=1;i<=n;++i)
        //     for(int j=1;j<=n-i;++j)
        //         if(t[j]>t[j+1])
        //             swap(t[j],t[j+1]);
        
    
        //输出
        for(int i=1;i<=n;++i){
            cout<<t[i]/100<<" "<<t[i]%100<<endl;
        }
    }
    
    • -1
      @ 2025-9-26 23:03:07

      方法思路

      定义结构体:创建 Schedule 结构体,包含日期 x 和时间 y。
      读取输入:先读取日程数量 n,再读取 n 条日程的日期和时间。
      排序:使用 qsort 函数对日程数组排序,排序规则为:
      若日期不同,按日期升序排列;
      若日期相同,按时间升序排列。
      输出结果:遍历排序后的数组,输出每条日程的日期和时间。

      #include <stdio.h>
      #include <stdlib.h>
      
      // 定义日程结构体:包含日期x和时间y
      typedef struct {
          int x;
          int y;
      } Schedule;
      
      // qsort的比较函数:先按x升序,x相同时按y升序
      int compare(const void *a, const void *b) {
          Schedule *s1 = (Schedule *)a;
          Schedule *s2 = (Schedule *)b;
          if (s1->x != s2->x) {
              return s1->x - s2->x; // 日期不同,返回日期差(升序)
          } else {
              return s1->y - s2->y; // 日期相同,返回时间差(升序)
          }
      }
      
      int main() {
          int n;
          scanf("%d", &n); // 读取日程数量
      
          Schedule schedules[100]; // 存储最多100条日程(题目中n≤100)
      
          // 读取每条日程的日期和时间
          for (int i = 0; i < n; ++i) {
              scanf("%d %d", &schedules[i].x, &schedules[i].y);
          }
      
          // 对日程数组进行排序
          qsort(schedules, n, sizeof(Schedule), compare);
      
          // 输出排序后的日程
          for (int i = 0; i < n; ++i) {
              printf("%d %d\n", schedules[i].x, schedules[i].y);
          }
      
          return 0;
      }
      
      • 1

      信息

      ID
      618
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      (无)
      递交数
      24
      已通过
      6
      上传者