比赛 20120302 评测结果 AAAAAAAAAAA
题目名称 法雷序列 最终得分 100
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-02 18:24:47
显示代码纯文本
/*
PROB: frac1
ID: zyfwork1
LANG: C++
*/

//USACO Ordered Fractions
#include <algorithm>
#include <fstream>
#include <cstdio>
using namespace std;
ifstream fin("frac1.in");
ofstream fout("frac1.out");

int top=0;

struct Fractions
{
    double key;
    double fenzi;
    double fenmu;   
    int sen;//前驱
    int next;//后继
}N[40000];

void Insert(double key,double fenzi,double fenmu)
{
    int point=0;
    while (key>N[point].key)
    {
        point=N[point].next;
    }
    //Create a new node
    N[top].key=key;
    N[top].fenzi=fenzi;
    N[top].fenmu=fenmu;
   
    N[top].next=point;
    N[top].sen=N[point].sen;
   
    N[point].sen=top;//後繼的前驅等於自己
   
    N[N[top].sen].next=top;//前驅的後繼等於自己
   
    top++;
}

bool isHZ(int ma,int mi)
{
    if (ma==1 && mi==0) return true;
    if (ma==1 && mi==1) return true;
    if(mi>ma) return false;
    if (ma==1) return false;
    if (mi==0) return false;
    for (int i=2;i<=mi;i++)
    {
        if (ma%i==0 && mi%i==0) return false;
    }
    return true;
}

void print()
{
    int point=N[0].next;
    while(N[point].next!=-1)
    {
        //fout<<N[point].fenzi<<" "<<N[point].fenmu<<" "<<N[point].key<<" "<<endl;
        fout<<N[point].fenzi<<"/"<<N[point].fenmu<<endl;
        point=N[point].next;
    }
}

int main()
{
    N[0].key=-1;N[0].next=1;N[0].sen=-1;
    N[1].key=65525;N[1].next=-1;N[0].sen=0;
    top=2;
    int num;
    fin>>num;
   
    for (int i=1;i<=num;i++)
    {
        for (int j=0;j<=i;j++)
        {
            if (isHZ(i,j))
            {
                double di=i;
                double dj=j;
                Insert(dj/di,dj,di);
            }
        }
    }
    print();   
    return 0;
}