• usaco 1.2.1 Milking Cows 题解


    【算法】模拟  【难度】★☆☆☆☆


    这是一道区间合并问题。我的算法如下;
    对于输入数据:
    3
    300 1000
    700 1200
    1500 2100
    可得三个区间[300,1000][700,1200][1500,2100]
    读入时开一个二维数组tt,按顺序读入300,1000,700,1200,1500,2100;
    其中区间开头的数值做标记1,区间终点做标记-1;
    这样tt就变成了:
    [i][0] 300 1000 700 1200 1500 2100
    [i][1] 1 -1 1 -1 1 -1
    然后顺序遍历这个数组;
    开一个计数器变量ct=0;
    每当当前的数标记为1时ct++,标记为-1时ct--;
    每当ct恰好==0时就完成了一个大区间合并;
    其他工作就好做了;
    也可以理解为离散化;
    【收获】离散化的区间处理
    View Code
     1 /*
    2 ID: wsc5001
    3 LANG: C
    4 TASK: milk2
    5 */
    6 #include <stdio.h>
    7 #include <stdlib.h>
    8 long int tt[10010][2]={0};
    9 void quicksort (int f,int r)
    10 {
    11 int i,j;
    12 long int t0,t1;
    13 i=f;
    14 j=r;
    15 t0=tt[i][0];
    16 t1=tt[i][1];
    17 while (i<j)
    18 {
    19 while (i<j&&tt[j][0]>t0){j--;}
    20 if(i<j)
    21 {
    22 tt[i][0]=tt[j][0];
    23 tt[i][1]=tt[j][1];
    24 i++;
    25 }
    26 while (i<j&&tt[i][0]<t0){i++;}
    27 if(i<j)
    28 {
    29 tt[j][0]=tt[i][0];
    30 tt[j][1]=tt[i][1];
    31 j--;
    32 }
    33 }
    34 tt[i][0]=t0;
    35 tt[i][1]=t1;
    36 if (i-1>f)
    37 quicksort(f,i-1);
    38 if (j+1<r)
    39 quicksort(j+1,r);
    40 }
    41 int main()
    42 {
    43 FILE *fin,*fout;
    44 fin=fopen("milk2.in","r");
    45 fout=fopen("milk2.out","w");
    46 int n;
    47 int i,j,t,flag=1;
    48 long int a,b,f,r,tf,maxk=0,maxm=0,q,w;
    49 long int temp[2][2];
    50 fscanf(fin,"%d",&n);
    51 //读入时间表
    52 //开始时刻标记1 结束时刻标记-1
    53 for (i=0;i<2*n;i++)
    54 {
    55 fscanf(fin,"%ld",&tt[i][0]);
    56 tt[i][1]=flag;
    57 flag=flag*-1;
    58 }
    59 //按时间先后排序
    60 quicksort(0,2*n-1);
    61 a=tt[0][0];
    62 q=0;//计数
    63 //a 是起点 b 是终点
    64 for (i=0;i<2*n;i++)
    65 {
    66 if (tt[i][1]==1)
    67 q++;
    68 if (tt[i][1]==-1)
    69 q--;
    70 if (q==0)
    71 {
    72 b=tt[i][0];
    73 tf=b-a;
    74 if (tf>maxk)
    75 maxk=tf;
    76 tf=tt[i+1][0]-b;
    77 if (tf>maxm)
    78 maxm=tf;
    79 a=tt[i+1][0];
    80 }
    81
    82 }
    83 fprintf(fout,"%ld %ld\n",maxk,maxm);
    84 //system("pause");
    85 fclose(fin);
    86 fclose(fout);
    87 }
  • 相关阅读:
    小知识!
    命令级的python静态资源服务。
    自定义滚动条样式-transition无效
    css:a:visited限制
    react16 渲染流程
    virtual-dom
    用video标签流式加载
    golang 代码笔记
    position:fixed not work?
    go/node/python 多进程与多核cpu
  • 原文地址:https://www.cnblogs.com/loveidea/p/2416917.html
Copyright © 2020-2023  润新知