| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 42026 人关注过本帖, 47 人收藏
标题:C论坛算法团队 首战 西安电子科技大学OJ
只看楼主 加入收藏
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
回复 127楼 czz5242199
Thank You,我原来是忘记0了。

编程之路定要走完……
2012-12-23 18:37
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
Problem 1202 - Meepo's problem II
Problem 1202 - Meepo's problem II

Time Limit: 1000MS   Memory Limit: 131072KB   Difficulty:
Total Submit: 2  Accepted: 1  Special Judge: No


Description


 Meepo the Geomancer is a mischievous spirit of the earth who enjoys burying his enemies alive in mountains of rock spikes.We all know that Meepo can summons some duplicate of himself,the clones are independent to each other and have the same abilities as Meepo.

When the Kth Meepo clone be summoned, this clone gain F(K,D) extra damage.

  Here F(K,D) means the Kth small prime factor of D,where D is the primary Meepo's damage.

  For example if primary Meepo's damage is 12, F(1,12) = 2.

  And if K is bigger than the numbers of D's prim factor, F(K,D) = D.

  Now if Meepo's damge range is [Li , Ri] , he want to know his Kth clone's

damage range.

Input

 First line a number n (n<=100000),means Meepo's query.
  Next n line, 3 positive integer a line: Li,Ri,K ,means Meepo's damage range is [Li,Ri],
and he wants to know his Kth clone's damage range.
  All Li,Ri,and K are no more than 500000 and Li<=Ri.

Output

 For every query, print two integer [L,R],means Meepo's clone's damage range.

Sample Input

3
17 47 3
11 36 7
3 16 1

Sample Output

34 94
22 72
6 26

Hint

Source

eggeek
分析
我魔兽玩的很烂。在同事的诱惑下玩了几次,不过发现自己真没这方面的天赋。相比自己去玩我更愿意看他们玩(更准确点是听),我这帮同事打魔兽时太有意思了,跟说相声似的。

书归正传,这个题目涉及两方面的计算,一是因式分解,另一个是最大最小值的检索。

由于数据量很大,所以直接的检索是行不通的。

直接检索的时间复杂度为O(n*m)。n是测试数据组数,m是检索范围,两个参数的上限都很大,所以轻松超时。

对此可以使用线段树来提高检索效率,将时间复杂度降到O(n * log(m))。

至于因式分解,可以改造一下素数筛来完成。
程序代码:
#include<stdio.h>

#define MAX_RANGE    500000
#define MAX_FN        7

struct
{
    int L, R;
    int max[MAX_FN];
    int min[MAX_FN];
    int il, ir;
} ST[MAX_RANGE * 2];

int FL, FR, K;

void build_tree(int L, int R, int root)
{
    static int ip = MAX_RANGE + 1;
    int i;
   
    ST[root].L = L;
    ST[root].R = R;
    i = (L + R) >> 1;
    if(i == L) ST[root].il = L; else build_tree(L, i, ST[root].il = ip++);
    if(i + 1 == R) ST[root].ir = R; else build_tree(i + 1, R, ST[root].ir = ip++);

    for(i = 0; i < MAX_FN; i++)
    {
        ST[root].max[i] = ST[ST[root].il].max[i] > ST[ST[root].ir].max[i] ? ST[ST[root].il].max[i] : ST[ST[root].ir].max[i];
        ST[root].min[i] = ST[ST[root].il].min[i] < ST[ST[root].ir].min[i] ? ST[ST[root].il].min[i] : ST[ST[root].ir].min[i];
    }
}

void init()
{
    int  i, j, t;

    ST[1].L = ST[1].R = 1;
    for(i = 0; i < MAX_FN; i++) ST[1].max[i] = ST[1].min[i] = 2;

    for(i = 2; i <= MAX_RANGE; i++)
    {
        ST[i].L = ST[i].R = i;
        if(!ST[i].il)
        for(j = i + i; j <= MAX_RANGE; ST[j].il++, j += i) ST[j].max[ST[j].il] = ST[j].min[ST[j].il] = i + j;
        for(t = i + i, j = ST[i].il; j < MAX_FN; j++) ST[i].max[j] = ST[i].min[j] = t;
    }
    build_tree(1, MAX_RANGE, 0);
}

void search(int L, int R, int root)
{
    if(L > ST[root].R || R < ST[root].L) return;
    if(L <= ST[root].L && R >= ST[root].R)
    {
        if(FL > ST[root].min[K]) FL = ST[root].min[K];
        if(FR < ST[root].max[K]) FR = ST[root].max[K];
        return;
    }
    if(L < ST[root].L) L = ST[root].L;
    if(R > ST[root].R) R = ST[root].R;
    search(L, R, ST[root].il);
    search(L, R, ST[root].ir);
}

void output(int L, int R)
{
    FL = MAX_RANGE * 2;
    FR = 1;
    K = K > MAX_FN ? MAX_FN - 1 : K - 1;
    search(L, R, 0);
    printf("%d %d\n", FL, FR);
}

int main()
{
    int n, Li, Ri;

    init();
    for(scanf("%d", &n); n--; output(Li, Ri))
        scanf("%d%d%d", &Li, &Ri, &K);
    return 0;
}

重剑无锋,大巧不工
2012-12-24 21:48
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
Problem 1203 - put on make up
Problem 1203 - put on make up

Time Limit: 3000MS   Memory Limit: 65536KB   Difficulty:
Total Submit: 6  Accepted: 2  Special Judge: No


Description

作为coser,化妆是很重要的。于是呢,每次出外景都要求妆娘的行为是不对的(哪里有那么多免费的妆娘让你用呀),所以要自己学啦。那么,要学的话,得先买化妆品对吧~对吧对吧~

于是很欢乐地背着包出去,结果更欢乐地发现了,那个,包,它,有点小了><所以不得不对要买的东西做个规划。

姐姐我现在看上了n种化妆品,但是由于那可怜的小包咱只能买k种,于是我给每个化妆品两个评价标准a和b,现在我希望买的k种化妆品使得ln(a1*a2*…*ak)/ln(b1*b2*…*bk)最大。于是你只要能帮姐姐我算出这个最大值就可以了喵,至于为什么要取ln,只是因为我觉得e是一个比较好玩的数字而已。


Input

多组数据以EOF结束。每组数据第一行包括两个数n和k,接下来两行各有n个数,第一行是每个化妆品对应的评价标准ai,第二行是bi,输入均为整数。

0<k<=n<=10000        10<=bi<=ai<=1000

Output

每组数据输出一行为对应数据的最大值,保留三位有效数字。

Sample Input

3 2
60 50 40
10 20 30

Sample Output

1.511

Hint


Source

d891320478
分析
我怀着忐忑的心情决定尝试贪心算法,还好AC了。

如果在前i个值中选k个得到的最大值为F[i, k]。那么F[i + 1, k] 等于用第i+1个元素替换原k个元素之一得到的最大值。
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    double ln[1001], a[10000], b[10000], ra, rb, mr, tr;
    int n, k, mi, i, j;

    for(i = 10; i <= 1000; i++) ln[i] = log(i);
    for(; scanf("%d%d", &n, &k) != EOF; printf("%.3lf\n", mr))
    {
        for(i = 0; i < n; a[i++] = ln[j]) scanf("%d", &j);
        for(i = 0; i < n; b[i++] = ln[j]) scanf("%d", &j);
        for(ra = rb = i = 0; i < k; i++) ra += a[i], rb += b[i];

        for(mr = ra / rb; i < n; ra -= a[mi], a[mi] = a[i], rb -= b[mi], b[mi] = b[i], i++)
        for(ra += a[i], rb += b[i], mi = i, j = 0; j < k; j++)
        if((tr = (ra - a[j]) / (rb - b[j])) > mr) mr = tr, mi = j;
    }
    return 0;
}

重剑无锋,大巧不工
2012-12-24 21:59
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
版主,看了你的回信我终于知道我为什么看不懂了。。。。。
捧起我的《算法导论》继续奋战吧。。。。。。。
希望早日加入OJ行列

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-26 09:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 131楼 yaobao
关于算法的学习,其实阅读别人的代码帮助并不大,或者说阅读别人的代码的意义并不在算法的学习上。

阅读代码学的是别人的算法实现方法,它的益处在于提高你的编码技巧。但前提是你得理解这个算法。

编码技巧决定的是你的程序写得好坏的问题,而算法决定的是你的能不能写出程序的问题。

呵呵,有没有被绕晕?祝你在计算机的道路上越学越开心。

重剑无锋,大巧不工
2012-12-26 09:34
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
呵呵,爱是早就想研究算法的,买了《算法导论》,也被他的厚度吓坏了,就一直放到现在,没认为有多重要,终于发现,原来算法才是编程的灵魂,研究吧。
啊啊啊啊啊,苦命啊,要同时研究4本书。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-26 09:54
周月
Rank: 2
等 级:论坛游民
帖 子:9
专家分:11
注 册:2012-12-31
收藏
得分:0 
想问一下,一般学员如何学习
有什么资料据介绍
2012-12-31 18:36
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 
杨哥,曹哥,最近放假回家了,和你们告个别!~~~明年见吧~~~

编程之路定要走完……
2013-01-02 21:46
虚荣
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-1-4
收藏
得分:0 
回复 7楼 beyondyf
看不懂   求教
2013-01-06 14:06
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
砸砖一枚。
Problem 1215

机内码神马的,就是最高位为 1。注意是两个字符就行了
程序代码:
#include <stdio.h>

int main()
{
    int n;scanf("%d ", &n);
    int ch, i;

    while (n--)
    {
        i = 0;
        while ((ch = getchar()) != '\n')
        {
            i += ch >> 7 & 1;
        }
        printf("%d\n", i / 2);
    }
    return 0;
}







[ 本帖最后由 azzbcc 于 2013-1-15 23:51 编辑 ]


[fly]存在即是合理[/fly]
2013-01-15 23:50
快速回复:C论坛算法团队 首战 西安电子科技大学OJ
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032280 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved