USCAO Section 1.1 Milking Cows
2012-04-27 20:46
507 查看
MilkingCows
Threefarmersriseat5ameachmorningandheadforthebarntomilkthreecows.Thefirstfarmerbeginsmilkinghiscowattime300(measuredinsecondsafter5am)andendsattime1000.Thesecondfarmerbeginsattime700andendsattime1200.The
thirdfarmerbeginsattime1500andendsattime2100.Thelongestcontinuoustimeduringwhichatleastonefarmerwasmilkingacowwas900seconds(from300to1200).Thelongesttimenomilkingwasdone,betweenthebeginningandtheendingofallmilking,
was300seconds(1500minus1200).
YourjobistowriteaprogramthatwillexaminealistofbeginningandendingtimesforN(1<=N<=5000)farmersmilkingNcowsandcompute(inseconds):
Thelongesttimeintervalatleastonecowwasmilked.
Thelongesttimeinterval(aftermilkingstarts)duringwhichnocowswerebeingmilked.
[/code]
[/code]
Threefarmersriseat5ameachmorningandheadforthebarntomilkthreecows.Thefirstfarmerbeginsmilkinghiscowattime300(measuredinsecondsafter5am)andendsattime1000.Thesecondfarmerbeginsattime700andendsattime1200.The
thirdfarmerbeginsattime1500andendsattime2100.Thelongestcontinuoustimeduringwhichatleastonefarmerwasmilkingacowwas900seconds(from300to1200).Thelongesttimenomilkingwasdone,betweenthebeginningandtheendingofallmilking,
was300seconds(1500minus1200).
YourjobistowriteaprogramthatwillexaminealistofbeginningandendingtimesforN(1<=N<=5000)farmersmilkingNcowsandcompute(inseconds):
Thelongesttimeintervalatleastonecowwasmilked.
Thelongesttimeinterval(aftermilkingstarts)duringwhichnocowswerebeingmilked.
PROGRAMNAME:milk2
INPUTFORMAT
Line1: | Thesingleinteger |
Lines2..N+1: | Twonon-negativeintegerslessthan1000000,thestartingandendingtimeinsecondsafter0500 |
SAMPLEINPUT(filemilk2.in)
3 3001000 7001200 15002100
OUTPUTFORMAT
Asinglelinewithtwointegersthatrepresentthelongestcontinuoustimeofmilkingandthelongestidletime.SAMPLEOUTPUT(filemilk2.out)
900300
困扰了我许多天,今天心平气静,两下就AC了
/*
ID:nealgav1
PROG:milk2
LANG:C++
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#defineN1000005
usingnamespacestd;
class_cow
{
public:
intstart,end;
};
_cowcow
;
boolcmp(_cowa,_cowb)
{
if(a.start==b.start)
returna.end<b.end;
returna.start<b.start;
}
intmain()
{
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
intm;
while(cin>>m)
{
for(inti=0;i<m;i++)
{
cin>>cow[i].start>>cow[i].end;
}
sort(cow,cow+m,cmp);
intansmax=0,anspause=0;
intnext=0;//记录下一个
for(inti=1;i<m;i++)
{
if(cow[i].start<=cow[next].end)
{
if(cow[i].end>cow[next].end)
{
cow[next].end=cow[i].end;
ansmax=max(ansmax,cow[next].end-cow[next].start);
}
}
else
{
cow[++next].end=cow[i].end;//next指针后移一位
cow[next].start=cow[i].start;
anspause=max(cow[next].start-cow[next-1].end,anspause);
ansmax=max(ansmax,cow[next].end-cow[next].start);
}
}
ansmax=max(ansmax,cow[0].end-cow[0].start);
cout<<ansmax<<""<<anspause<<endl;
}
}
[/code]
MilkingCows
Wereadthelistoftimes,sortitbystarttime,andthenwalkoverthelist
once,mergingoverlappingtimes.Thenwewalkthelistwatchingforlongmilking
periodsandlongnon-milkingperiods.
Analternateapproachwouldbetojustkeepanarrayofsizeamillionand
markofftimes.Onanicefastprocessor,that'sprobablyfastenough,butour
abovealgorithmwillworkevenonslowprocessors,andit'snotmuchharderto
write.
[code]#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#defineMAXMILKING5000
typedefstructMilking Milking;
structMilking{
intbegin;
intend;
};
Milkingmilking[MAXMILKING];
intnmilking;
int
milkcmp(constvoid*va,constvoid*vb)
{
Milking*a,*b;
a=(Milking*)va;
b=(Milking*)vb;
if(a->begin>b->begin)
return1;
if(a->begin<b->begin)
return-1;
return0;
}
void
main(void)
{
FILE*fin,*fout;
inti,j,t,tmilk,tnomilk;
Milkingcur;
fin=fopen("milk2.in","r");
fout=fopen("milk2.out","w");
assert(fin!=NULL&&fout!=NULL);
/*readinput,sort*/
fscanf(fin,"%d",&nmilking);
for(i=0;i<nmilking;i++)
fscanf(fin,"%d%d",&milking[i].begin,&milking[i].end);
qsort(milking,nmilking,sizeof(Milking),milkcmp);
/*walkoverlist,lookingforlongperiodsoftime*/
/*tmilk=longestmilkingtime*/
/*tnomilk=longestnon-milkingtime*/
/*cur=currentspanofmilkingtimebeingconsidered*/
tmilk=0;
tnomilk=0;
cur=milking[0];
for(i=1;i<nmilking;i++){
if(milking[i].begin>cur.end){ /*adowntime*/
t=milking[i].begin-cur.end;
if(t>tnomilk)
tnomilk=t;
t=cur.end-cur.begin;
if(t>tmilk)
tmilk=t;
cur=milking[i];
}else{
if(milking[i].end>cur.end)
cur.end=milking[i].end;
}
}
/*checkfinalmilkingperiod*/
t=cur.end-cur.begin;
if(t>tmilk)
tmilk=t;
fprintf(fout,"%d%d\n",tmilk,tnomilk);
exit(0);
}
AnotherIdea(fromJesseRuderman)
Thesolutiongivenformilk2sortsmilkingperiodsbystartandthenwalksthroughthem.Thesolutionpagealsomentionsasecondpossiblesolutioninvolvingahugearray.Here'sathirdsolutionthatsortsstartingandstoppingtimestogether,andwalksthroughthe"events"offarmersstartingandstoppingtomilk./*sortthestartingandendingtimes,thengothroughthemfrom
starttofinish,keepingtrackofhowmanyfarmersaremilking
betweeneach"event"(asinglefarmerstartingandstopping).*/
#include<fstream.h>
#include<stdlib.h>
structevent
{
longseconds;/*secondssince5am*/
signedcharss;/*start=1,stop=-1(deltanumberoffarmersmilking)
*/
};
inteventcmp(constevent*a,constevent*b)
{
if(a->seconds!=b->seconds)
return(a->seconds-b->seconds);/*300before500*/
return(b->ss-a->ss);/*1(start)before-1(stop)*/
}
intmain()
{
ifstreamin;
ofstreamout;
in.open("milk2.in");
out.open("milk2.out");
intnum_intervals,num_events,i;
eventevents[5000*2];
in>>num_intervals;
num_events=num_intervals*2;
for(i=0;i<num_intervals;++i)
{
in>>events[2*i].seconds;events[2*i].ss=1;
in>>events[2*i+1].seconds;events[2*i+1].ss=-1;
}
qsort(events,num_events,sizeof(event),
(int(*)(constvoid*,constvoid*))eventcmp);
/*for(i=0;i<num_events;++i)
out<<events[i].seconds
<<(events[i].ss==1?"start":"stop")<<endl;*/
intnum_milkers=0,was_none=1;
intlongest_nomilk=0,longest_milk=0;
intistart,ilength;
for(i=0;i<num_events;++i)
{
num_milkers+=events[i].ss;
if(!num_milkers&&!was_none)
{
/*therearesuddenlynomilkers.*/
ilength=(events[i].seconds-istart);
if(ilength>longest_milk)
longest_milk=ilength;
istart=events[i].seconds;
}
elseif(num_milkers&&was_none)
{
/*therearesuddenlymilkers.*/
if(i!=0)
{
ilength=(events[i].seconds-istart);
if(ilength>longest_nomilk)
longest_nomilk=ilength;
}
istart=events[i].seconds;
}
was_none=(num_milkers==0);
}
out<<longest_milk<<""<<longest_nomilk<<endl;
return0;
[/code]
相关文章推荐
- USCAO Section 1.1 Milking Cows
- uscao Section 1.1 Greedy Gift Givers
- uscao Section 1.1 Greedy Gift Givers
- uscao Section 1.1 Friday the Thirteenth
- uscao Section 1.1 Friday the Thirteenth
- USCAO-Section1.1 Your Ride Is Here
- USCAO-Section1.1 Broken Necklace(DP版)
- USCAO-Section1.2 Milking Cows
- USCAO section 1.1 Transformations
- USCAO section 1.1 Transformations
- USCAO section 4.1 Fence Loops(最短路,最小环,5级)
- USCAO section 1.4 Packing Rectangles
- USCAO section 4.1 Fence Loops(最短路,最小环,5级)
- USCAO Section 1.2 Palindromic Squares
- USCAO-Section 1.3 Wormholes
- USCAO section 1.3 Mixing Milk
- USCAO Section 1.2 Dual Palindromes
- USCAO-Section 1.4 Arithmetic Progressions
- USCAO section 1.3 Mixing Milk
- USCAO section1.3 Barn Repair