zoukankan      html  css  js  c++  java
  • 1数据结构概述及线性表

    COGS p646 为 法雷序列

    分析:

    这题枚举出来真分数(欧几里得算法判断),然后快排。
    当真分数a/b<真分数c/d时,有a*d<b*c

    我是直接对真分数的实数值进行排序

     1 type
     2   node=record
     3         x,y:longint;         //integer足矣
     4         d:double;            //real足矣
     5       end;
     6 var
     7   n,i,j,len:longint;
     8   sn:array[1..8000] of node; //如果不想用记录类型,可以用一个二维数组 + 一个一位数组代替
     9 function gcd(x,y:longint):longint;      // function gcd(x,y:longint):longint;
    10 begin                                   // begin  
    11   if x=0 then gcd:=y                    //   if y=0 then exit(x)
    12    else gcd:=gcd(y mod x,x);            //    else exit(gcd(y,x mod y));
    13 end;                                    // end
    14 
    15 {function gcd(x,y:longint):longint;
    16 var t:longint;
    17 begin
    18   while y<>0 do begin
    19                   t:=x; x:=y; y:=t mod y;
    20                 end;  
    21 end;}
    22 
    23 procedure qsort(l,r:longint);
    24 var i,j:longint;
    25     mid:double;
    26     temp:node;
    27 begin
    28   i:=l; j:=r;
    29   mid:=sn[(l+r) div 2].d;
    30    while i<=j do
    31     begin
    32      while sn[i].d<mid do inc(i);
    33      while sn[j].d>mid do dec(j);
    34      if i<=j then
    35       begin
    36         temp:=sn[i]; sn[i]:=sn[j]; sn[j]:=temp;  //若用上述数组则需要写三行交换语句,记录类型直接交换
    37         inc(i); dec(j);
    38       end;
    39     end;
    40    if i<r then qsort(i,r);
    41    if l<j then qsort(l,j);
    42 end;
    43 begin
    44 assign(input,'frac1.in');
    45 assign(output,'frac1.out');
    46 reset(input);
    47 rewrite(output);
    48   readln(n);
    49   sn[1].x:=0; sn[1].y:=1; sn[1].d:=0.0;
    50   sn[2].x:=1; sn[2].y:=1; sn[2].d:=1.0;
    51   len:=2;                               //也可以写成下面这样,省去初始化,直接输出首项和末项
    52    for i:=2 to n do                      //for i:=1 to n-1 do
    53     for j:=1 to i-1 do                    //for j:=i+1 to n do
    54      if gcd(i,j)=1 then
    55       begin
    56         inc(len);
    57         sn[len].x:=j; sn[len].y:=i; sn[len].d:=j/i;
    58       end;
    59      qsort(1,len);
    60     for i:=1 to len do
    61      writeln(sn[i].x,'/',sn[i].y);
    62 close(input);
    63 close(output);
    64 end.

    排行榜第一的大神用hash,不用排序直接输出,霸气啊~

    瞻仰下牛的程序:

     1 { 
     2 ID: qilinar3 
     3 PROG: frac1 
     4 LANG: PASCAL 
     5 }
     6 var
     7     hash:array[0..160*159,1..2] of integer; 
     8     i,j,n:integer; 
     9     t:longint; 
    10 begin
    11     assign(input,'frac1.in');reset(input); 
    12     assign(output,'frac1.out');rewrite(output); 
    13     readln(n); 
    14     for i:=0 to n do
    15         for j:=1 to n do
    16             if j>=i then
    17             begin
    18                 t:=round(i/j*160*159); 
    19                 if hash[t][2]=0 then
    20                 begin     hash[t][1]:=i;     hash[t][2]:=j;     end; 
    21             end; 
    22     for i:=0 to 160*159 do if hash[i][2]<>0 then writeln(hash[i][1],'/',hash[i][2]); 
    23     close(input);close(output); 
    24 end.
  • 相关阅读:
    jquery中子元素和后代元素的区别
    MVC4 创建控制器时,无法检索元数据
    ref和out的用法说明举例(转)
    DataView的ToTable方法,类似数据库Distinct。
    oracle 19C 静默安装(单机版)
    Supervisord进程管家
    zabbix v3.0安装部署【转】
    Linux下Hadoop2.7.3集群环境的搭建
    Redis集群搭建与简单使用【转】
    redis+keepalived实现高可用
  • 原文地址:https://www.cnblogs.com/vacation/p/5184404.html
Copyright © 2011-2022 走看看