usaco-2.1-frac1-pass

这个最简递增分数题关键在于最简,如果知道这个方法,此题易解。呵呵,一次性通过。

/*
ID: qq104801
LANG: C++
TASK: frac1
*/

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <cmath>

using namespace std;

int n;
struct frac
{
    int up;
    int down;
    bool operator < (const frac &b)const{
       return up*b.down < down*b.up; }
};

bool cmp(const frac &a,const frac &b)
{
    return a.up*b.down < b.down*b.up;
}

int isstupid(int up,int down)
{
    int t;
    if (up==1)return 1;
    if(down%up==0)return 0;
    while(down%up!=0)
    {
        t=up;up=down%up;down=t;
    }
    if(up>1)return 0;
    else return 1;
}

void test()
{
    freopen("frac1.in","r",stdin);
    freopen("frac1.out","w",stdout);
    cin >> n;
    //cout<<n<<endl;
    cout<<"0/1"<<endl;
    vector<frac> v;
    int i,j,k;
    frac f;
    for(i=2;i<=n;i++)
        for(j=1;j<=i;j++)
        {
            if(isstupid(j,i))
            {
                f.up=j;f.down=i;
                v.push_back(f);
                //cout<<f.up<<"/"<<f.down<<endl;
            }
        }
    sort(v.begin(),v.end());
    //cout<<endl;
    vector<frac>::iterator it;
    for(it=v.begin();it!=v.end();it++)
        cout<<it->up<<"/"<<it->down<<endl;

    cout<<"1/1"<<endl;
}

int main ()
{
    test();
    return 0;
}

测试结果:

USER: cn tom [qq104801]
TASK: frac1
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.008 secs, 3376 KB]
   Test 2: TEST OK [0.011 secs, 3508 KB]
   Test 3: TEST OK [0.008 secs, 3508 KB]
   Test 4: TEST OK [0.008 secs, 3508 KB]
   Test 5: TEST OK [0.008 secs, 3508 KB]
   Test 6: TEST OK [0.011 secs, 3508 KB]
   Test 7: TEST OK [0.014 secs, 3508 KB]
   Test 8: TEST OK [0.038 secs, 3508 KB]
   Test 9: TEST OK [0.070 secs, 3508 KB]
   Test 10: TEST OK [0.097 secs, 3508 KB]
   Test 11: TEST OK [0.329 secs, 3508 KB]

All tests OK.

YOUR PROGRAM (‘frac1‘) WORKED FIRST TIME! That‘s fantastic -- and a rare thing. Please accept these special automated congratulations.

Here are the test data inputs:

------- test 1 ----
1
------- test 2 ----
2
------- test 3 ----
4
------- test 4 ----
7
------- test 5 ----
10
------- test 6 ----
15
------- test 7 ----
24
------- test 8 ----
50
------- test 9 ----
75
------- test 10 ----
100
------- test 11 ----
160

Keep up the good work!
Thanks for your submission!
时间: 2024-09-30 18:10:01

usaco-2.1-frac1-pass的相关文章

USACO frac1直接排序

/* ID:kevin_s1 PROG:frac1 LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib>

USACO 之 Section 2.1 (已解决)

The Castle: /* 搜索 1A*/ 1 /* 2 ID: Jming 3 PROG: castle 4 LANG: C++ 5 */ 6 #include <iostream> 7 #include <fstream> 8 #include <sstream> 9 #include <cstdlib> 10 #include <cstdio> 11 #include <cstddef> 12 #include <ite

USACO 做题小结

还记得之前,发过一篇阶段性总结与未来规划..结果由于最近rp爆发(保研成功+进wf)后者显然靠bin神,前者也是运气.因此,放松了一段时间.然后就开始刷usaco了,原因是不用花时间找解题报告在NOCOW上全部都有,很是方便.所以只需单独开一片随笔把每天做题总结一下. Chapter1-Getting started(入门) 都是超级大水题就略过了. Chapter2-Bigger Challenges(更大的挑战) 2.1 castle  这是一道基本的搜索题目,很基础.前面两个值直接搜的,后

Usaco Open09 Gold

Problem 1: Ski Lessons [Brian Jacokes, 2002] Farmer John wants to take Bessie skiing in Colorado. Sadly, Bessie is not really a very good skier. Bessie has learned that the ski resort is offering S (0 <= S <= 100) ski classes throughout the day. Les

【USACO 2.1】Ordered Fractions

/* TASK: frac1 LANG: C++ URL: http://train.usaco.org/usacoprob2?S=frac1&a=dbgwn5v2WLr SOLVE: 直接枚举,约分,排序,去重 */ #include<cstdio> #include<algorithm> using namespace std; struct node{ int nu,deno; double v; }a[40000]; int n,cnt; int cmp(node

USACO 2.1

USACO 2.1.1 题解: 这题有点毒,调了一个中午…… 先读入,用一个三维布尔数组储存第(i,j)个点的四个方向是否有墙. 对于第一个问题,直接BFS求连通块,并构造出一个图,第(i,j)个点的数字表示该房间属于第几个连通块. 对于第二个问题,边BFS边统计. 对于第三个问题,直接暴力枚举每面墙,找最大值. 对于第四个问题,同样是暴力枚举,但要考虑优先级问题.从右上角的房间枚举到左下角的房间(j=m downto 1;i=1 to n),每个房间先看东墙再看北墙. 代码: { ID:m15

COGS 696. [IOI1996][USACO 2.3] 最长前缀

★   输入文件:prefix.in   输出文件:prefix.out   简单对比时间限制:1 s   内存限制:128 MB 描述 USACO 2.3.1 IOI96 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.元素不一定要全部出现(如下例中B

USACO prefix TrieTree + DP

/* ID:kevin_s1 PROG:prefix LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map> #include <set> #include <algorithm> #include <cstdlib>

【USACO 1.3.4】牛式

[題目描述 ] 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ---------- * * * * * * ---------- * * * * 数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0. 注意一下在美国的学校中教的"部分乘积",第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积. 写一个程序找出所有的牛式. [格式] INPUT FORMAT: (f

USACO Chapter 1 Section 1.1

USACO的题解和翻译已经很多了... 我只是把自己刷的代码保存一下. 1.PROB Your Ride Is Here 1 /* 2 ID:xiekeyi1 3 PROG:ride 4 LANG:C++ 5 */ 6 7 #include<bits/stdc++.h> 8 using namespace std ; 9 10 int main() 11 { 12 freopen("ride.in","r",stdin); 13 freopen(&quo