Milking Cows

翻译:http://www.nocow.cn/index.php/Translate:USACO/milk2

先qsort,然后把每小段的起始存起来,再循环找一下就行。神奇的是,我qsort都打错了却过了6组。。:D

———-
UPDATE @ 2010/3/12 17:19 当年发错程序了,删掉了。
今天做的这个最开始总是不对,本机没问题,传上去就出错。后来发现不能写成bool time[1000001]={0},用了memset,MS用法和pascal里的fillchar一样。time[i]表示从i到i+1的时间被占用,这应该是最白痴的做法了。
UPDATE @ 2010/3/25 18:51memset好像用错了。。好像是memset(**,0,sizeof(**))。。

/*
ID: djgreen1
LANG: C
TASK: milk2
*/
#include <stdio.h>
#include <stdbool.h>
 
int main()
{
    bool time[1000001];
    int i,n;
    long j,a,b;
    long low,high,count[2],max[2];
    FILE *in=fopen("milk2.in","r"),*out=fopen("milk2.out","w");
 
    memset(time,sizeof(time),false);
    low=1000000;
    high=1;
    max[1]=0;
    max[0]=0;
    count[1]=0;
    count[0]=0;
    fscanf(in,"%d\n",&n);
    for(i=0;i<n;i++)
    {
        fscanf(in,"%d %d",&a,&b);
        if(a<low) low=a;
        if(b>high) high=b;
        for(j=a;j<b;j++) time[j]=true;
    }
    for(j=low;j<=high;j++)
    {
        count[time[j]]++;
        if(time[j+1]!=time[j])
        {
            if(count[time[j]]>max[time[j]]) max[time[j]]=count[time[j]];       
            count[time[j]]=0;
        }
    }
    fprintf(out,"%d %d\n",max[1],max[0]);
    fclose(in);
    fclose(out);
}

———-
UPDATE @ 2010/3/13 21:38
C语言的struct、随机快排。

/*
ID: djgreen1
LANG: C
TASK: milk2
*/
#include <stdio.h>
#include <time.h> 
 
struct time
{
    long a,b;
};
struct time milk[5000];
void quicksort(long l, long r)
{
    long i,j,pivot;
    struct time temp;
    pivot=milk[rand()%(r-l+1)+l].a;
    i=l;
    j=r;
    while(i<j)
    {
        while(milk[j].a>pivot) j--;
        while(milk[i].a<pivot) i++;
        if (i<=j)
        {
            temp=milk[i];
            milk[i]=milk[j];
            milk[j]=temp;
            i++;
            j--;
        }
    }
    if (i<r) quicksort(i,r);
    if (j>l) quicksort(l,j);
}
 
int main()
{
    FILE *in=fopen("milk2.in","r"),*out=fopen("milk2.out","w");
    int i,n;
    long start,end,work,idle=0;
 
    fscanf(in,"%d",&n);
    srand(time(NULL));
    for (i=0;i<n;i++) fscanf(in,"%d%d",&milk[i].a,&milk[i].b);
    quicksort(0,n-1);
    start=milk[0].a;
    end=milk[0].b;
    work=end-start;
    for (i=0;i<n;i++)
    {
        if (milk[i].a>end)
        {
            if (end-start>work) work=end-start;
            if (milk[i].a-end>idle) idle=milk[i].a-end;
            start=milk[i].a;
            end=milk[i].b;
        }
        else
        {
            if (milk[i].b>end) end=milk[i].b;
        }
    }
    fprintf(out,"%d %d\n",work,idle);
    fclose(in);
    fclose(out);
}

Score Inflation

翻译:http://www.nocow.cn/index.php/Translate:USACO/inflate

第一个递归会超时,第二个是背包:f[n,m]=max{f[n-1,m]+f[n,m-t[n]]+s[n]}

Read More »

Mother’s Milk

翻译:http://www.nocow.cn/index.php/Translate:USACO/milk3

第一个是DFS,第二个是WFS,很繁琐。
Read More »

NOIP2004提高组合唱队形

题目很容易理解,可以去搜索。在RQNOJ中是第26题。

注意题中条件,身高不能相等,然后用求最长不上升序列的方法即可。

PS:很烦RQNOJ答对题就不能提交了。。据说只能用MJ。
Read More »

四川汶川地震

一场里氏7.8级的特大地震5月12日14时28分在中国的四川省爆发。美国联邦地质调查局的介绍。我是当天晚上才知道的,从第二天开始关注新闻。

新浪网报道:截止昨日(18日)14时,死亡人数达28881人,受伤198347人;救灾工作重点将转向农村,目前无重大疫情报告。目前余震不断,可以从这张图看出(推荐)。还可以从这个网站看到最近7天的世界上2.5级以上所有地震,为了看得更清楚些,可以看看5级以上的,其中大部分都是这次的余震。

推荐使用Google Earth查看最新情况:http://googlechinablog.com/2008/05/blog-post_13.html。也可以下载这个KML地标文件,打开这个地标就可以看到台湾福卫二号的拍摄的四川汶川震区的清晰卫星图像(据月光博客),但是分辨率好像很低(或许是我网速慢没显示)。

谷歌百度Live的地图搜索都推出了专题地图,很多网站都推出了寻亲专项搜索(谷歌新浪搜狗四川地震寻亲友网),如果你的亲人在那里可以去试试。

2008年是我国多灾多难的一年,南方雪灾、CPI上涨、ZD都对我国影响不小。作为一个普通人,希望大家尽自己的一份力,积极捐款,哪怕只是一元钱。推荐阅读:http://genmicha.cn/survivor-me.htm

捐款:

中国移动的客户可以通过发送手机短信进行捐款:编辑短信1至30,发送至1069999301,即可向灾区捐款1至30元,可以重复捐赠。此次捐赠活动客户产生的通信费用,中国移动将全部捐赠给灾区用于救灾 信息来源

中国红十字会总会救灾专用账号和热线:
1、通过银行捐款
开户单位:中国红十字会总会
人民币开户行:中国工商银行北京分行东四南支行
人民币账号:0200001009014413252
外币开户行:中信银行酒仙桥支行
外币账号:7112111482600000209
2、通过邮局捐款
收款人:中国红十字会总会
地址:北京市东城区北新桥三条8号
邮政编码:100007
3、通过网上捐款
登陆中国红十字会总会网站:http://redcross.org.cn点击进入“网上捐赠”栏目,按照提示操作即可。 信息来源

如果您想捐出支付宝或财付通中的钱,还可以通过支付宝捐助腾讯捐助。还有很多网站都推出了捐助专页。

现在时间过得很快,100多个小时已经过去了,幸存者生还的希望越来越渺茫。Bless All~~

为震区同胞祈福,祝福灾区的同胞们平安脱险

Symonds: Engine blow is a worry

Wednesday, 30 April 2008 00:00
原文:http://www.itv-f1.com/News_Article.aspx?id=42478

Pat Symonds承认,尽管他有信心问题会得到解决,Fernando Alonso在西班牙大奖赛中的引擎故障使车队有些担忧下一站土耳其大奖赛。

Alonso本来可以在家乡取得很多分数并为车队留下印象深刻的一个周末,但是当Alonso的RS28引擎在第35圈爆缸(let go放开, 释放, 发射)时,这就被抢走了。

周一,这个雷诺从蒙扎2006年以来的(outfit’s全套装备; 全套工具; 全部用品?)第一次故障很快就在被查明,车队也向itv.com/f1证实这是由分电盘(分电盘(Distributor) 点火系统高低压电的转接站,可将通往发火线圈的电路接通或切断,而后将产生的高电压配送到各缸火星塞。)问题引起的。

Symonds在雷诺最新的播客(podcast播客?)上说到,爆缸和爆缸的原因都令人惊讶。

总工程师说:“我们在周一上午把引擎送回了Viry并将它拆解。在我们把引擎从车中取出前,我们对问题是什么有个好的想法。周一上午确认了问题在哪,这问题确实令我们惊讶。尽管这是引擎一直在极限上(on the limit)工作的一个区域,但比赛也在极限——这就是问题的愿意。但是这不是我们在这种引擎上以前出现故障的区域,所以这是我们有点惊讶。虽然我们知道故障是什么,我们对零件(component零件, 组成整件部分的单件; 构成要素; 成分)的失灵不能做出完全解释。”

Symonds承认车队还没有(has yet to do sth.=has not yet done sth)找到(establish show (sth) to be true; prove 确定(某事物); 证实)分电盘小故障(glitch 小故障, 技术性的小毛病, 失灵; 低频干扰)的原因,这自然使车队有些担忧。

当被问到故障是否在下一站比赛中令人担心时,他回答道:“是的。任何不理解(lack of understanding)都令人担忧。”

然而,他相信或许问题会被证实是一次性(one-off)的,他还表达了他对引擎工程师(engine engineers)解决这一问题(resolve the issue)的能力的信心。

他补充说:“我对Viry的同事们(colleagues)将会有一个答案相当有信心,我也认为我们将会找出这是一个例外(exception)。当你在一个一般不出现问题的区域内出现问题,这一般是由于(due to)漏网(Idom: slipped through the net)的制造过程中(manufacture 制造, 加工; 粗制滥造; 捏造; 制造)的错误(error)或类似的问题。所以,当然我因我们不知道问题的原因而担忧,但是我猜想(suspect 疑有, 察觉; 怀疑; 不信任; 猜想; 怀疑, 疑心; 猜疑)我们的担忧将到达土耳其的时候减轻(alleviate 减轻, 使缓和)。”

Friday the Thirteenth

翻译:http://www.nocow.cn/index.php/USACO/friday

最简单的方法就能AC,一个月一个月算,我也是这样算的。这里提到可以按年算,想法不错。注意年份是1900+N-1。

{
ID: djgreen1
PROG: friday
LANG: PASCAL
}
program friday;
var
        n: longint;
        sum: array[0..6] of longint;
        date: longint;
        i: longint;
function leap(year: longint): boolean;
begin
        if (year mod 4 = 0) and (year mod 100 &gt; 0) then leap := true
        else if year mod 400 = 0 then leap := true
        else leap := false;
end;
begin
        assign(input, 'friday.in');
        assign(output, 'friday.out');
        reset(input);
        rewrite(output);
        fillchar(sum, sizeof(sum), 0);
        readln(n);
        date := 6;
        for i := 1 to n do
        begin
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
                date := date mod 7;
                inc(sum[date]);
                if leap(1899 + i) then inc(date);
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
                date := date mod 7;
                inc(sum[date]);
                date := date + 2;
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
                date := date mod 7;
                inc(sum[date]);
                date := date + 2;
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
                date := date mod 7;
                inc(sum[date]);
                date := date + 2;
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
                date := date mod 7;
                inc(sum[date]);
                date := date + 2;
                date := date mod 7;
                inc(sum[date]);
                date := date + 3;
 
        end;
        write(sum[6]);
        for i := 0 to 5 do write(' ', sum[i]);
        writeln;
        close(input);
        close(output);
end.

Read More »