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.
时间: 2024-10-17 23:30:40

1数据结构概述及线性表的相关文章

数据结构学习笔记——线性表

第2章  线性表 2.1  线性表的类型定义  线性结构的特点是:在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素:(2)存在唯一的一个被称做“最后一个”的数据元素:(3)除第一个之外,集合中的每个数据元素只有一个前驱:(4)除最后一个外,集合中每个数据元素均只有一个后继. 线性表的类型定义 线性表(linear_list)是最常用的且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成.在这种情况下

数据结构学习笔记——线性表的应用

数据结构学习笔记——线性表的应用 线性表的应用 线性表的自然连接 计算任意两个表的简单自然连接过程讨论线性表的应用.假设有两个表A和B,分别是m1行.n1列和m2行.n2列,它们简单自然连接结果C=A*B(i==j),其中i表示表A中列号,j表示表B中的列号,C为A和B的笛卡儿积中满足指定连接条件的所有记录组,该连接条件为表A的第i列与表B的第j列相等. 如:         1 2 3                3 5 A  =  2 3 3         B =  1 6       

python数据结构之一:线性表

线性表:零个或多个数据元素的有限序列. 咋一看这句话,我也不明白是什么意思,哈哈,举例说明一下吧.去电影院买票时,人们的排队就是一个线性表,有固定的最前一个,固定的最后一个. 张三是其中一个,他的前一个人,和后一个人是确定的单一的. 再如,一个公司里的一个部里有一个领导,多名员工,他们的关系就不是线性表了,有一对多的关系. 那么在python里如何创建线性表呢?如下: L1=["a","b","c","d","e&q

数据结构 笔记2 线性表

线性表是最简单,最常用的一种数据结构,它是由n个数据元素(结点)组成的有限序列. 线性表的基本运算 1.置空表 InitList(L) ,构造一个空的线性表L 2.求表长 ListLength(L) ,返回线性表L中元素个数,即表长. 3.取表中第i个元素GetNode(L,i) ,若1 <= i <= ListLength(L) ,则返回第i个元素a[i] 4.按值查找LocateNode(L,x),在表L中查找第一个值为x的元素,并返回该元素在表L中的位置,若表中没有元素的值为x,则返回0

数据结构一:线性表

线性表是最常用也是最简单的数据结构,几种常用的线性表的类模板C++描述描述如下: 1.顺序表 顺序表是将所有元素按逻辑顺序存储在一组地址连续的存储空间中的简单数据结构: 1 const int MAXSIZE = 1000; 2 template<class T> 3 class SeqList 4 { 5 public: 6 SeqList(){ lenght = 0; } // 无参构造函数 7 SeqList(const T a[], int n); // 带参构造函数,并用数组初始化

数据结构笔记之线性表

线性表即链表,基本特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,其他么个数据元素都有一个前驱和后继.是最基本且最常用的一种线性结构. 2.1线性表的定义和特点 由n(n>=0)个数据特性相同的元素否城的有限序列成为线性表,n为线性表长度,当n=0称空表. 举例:1.26个英文字母的字母表是一个线性表,数据元素是单个字母. 2.学生信息表中,每一个学生为一个数据元素,包括学号.姓名.性别等等数据项. 2.2案例:图书信息管理系统. 2.3线性表的类型定义 线性表是一个相当灵活的数据结构

数据结构与算法-线性表

近期在学习数据结构,反反复复已经看过几遍了,也做了一些练习题,但总感觉不记录一下,思路就不是很清晰,所以,从今天开始总结这段时间对数据结构的学习. 无论学习什么,基础知识都是最总要的,数据结构也不例外.线性表就是数据结构的基础,很多常见的数据结构都是基于线性表来实现的. 那么,什么是线性表呢?官方的定义是: 零个或多个数据元素的有限序列 可以从两个方面来理解线性表,首先它是一个序列,也就是其中的元素有先后顺序,其次是有限的,对于无线数列,也只能存在于理论数学中. 说了这么多,小结一下: 1)线性

数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串

Java面试宝典之数据结构基础 —— 线性表篇 一.数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已.比 如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会 有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为这种特点,使得数组适合:查询比较频繁,增.删比较少的情况,这就是数据结构的概念.数据结构 包括

数据结构第一篇——线性表的逻辑结构

?注:未经博主同意,不得转载. 线性表(linear list)是最常用且最简单的数据结构.简言之,一个线性表是n个数据元素的有限序列.至于每个数据元素的具体含义,在不同的情况下各不相同.例如,26个英文字母的字母表: (A,B,C,D,......Z) 线性表的抽象数据类型定义如下: 1 ADT List 2 { 3 Data: D={Ai|Ai<DataSet,i=1,2,...,n, n>=0} 4 //称n为线性表的表长 5 //称n=0时的线性表为空表 6 Structure: R=