比赛 20120302 评测结果 AAAAAAAAAAT
题目名称 法雷序列 最终得分 90
用户昵称 feng 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-03-02 20:46:57
显示代码纯文本
#include <iostream>
#include <fstream>
 
using namespace std;
 
int n,a[100000],b[100000],len=0;
 
 
void swap(int &x,int &y)
{
     int tmp=x;
     x=y;
     y=tmp;
}
 
int gcd(int x,int y)
{
    if (x>y) swap(x,y);
    if (x==0) return y;
    return (gcd(y%x,x));
}
 
void sort(int l,int r)
{
	
     int i=l,j=r;
     float mid=(float)a[(i+j)/2]/(float)b[(i+j)/2];
     for (;;)
     {
         for (;(float)a[i]/(float)b[i]<mid;i++) {}
         for (;(float)a[j]/(float)b[j]>mid;j--) {}
         if (i<=j)
         {
                  swap(a[i],a[j]);
                  swap(b[i],b[j]);
                  i++;
                  j--;
         }
         if (i>j) break;
     }
     if (l<j) sort(l,j);
     if (i<r) sort(i,r);
}
 
int main()
{
    ifstream fin("frac1.in");
    ofstream fout("frac1.out");
 
    fin>>n;
    len++;
    a[len]=0;
    b[len]=1;
    len++;
    a[len]=1;
    b[len]=1;
    for (int i=2;i<=n;i++)
    {
        for (int j=1;j<=i-1;j++)
        {
            if (gcd(i,j)==1)
            {
                            len++;
                            a[len]=j;
                            b[len]=i;
            }
        }
    }
	for (int i=1;i<=len;i++)
		for (int j=1;j<=len;j++)
		{
			if ((float)a[j]/(float)b[j]<(float)a[i]/(float)b[i])	
			{
				swap(a[i],a[j]);
                  swap(b[i],b[j]);	
			}
		}				  
    for (int i=len;i>=1;i--)
        fout<<a[i]<<"/"<<b[i]<<endl;
    return 0;
}