سوال milk2:
سوال از این قراره که n تا آدم تو n بازه زمانی شیر میدوشن.حالا میخوایم ببینیم که بیشترین بازه زمانی که توش حداقل 1 نفرشیر دوشیده و بیشترین بازه که توش شیری دوشیده نشده رو پیدا کنیم.
برنامه من واسه 6 تا تست درسته ولی واسه هفتمی غلطه کسی میدونه چرا؟؟؟؟؟
سوال از این قراره که n تا آدم تو n بازه زمانی شیر میدوشن.حالا میخوایم ببینیم که بیشترین بازه زمانی که توش حداقل 1 نفرشیر دوشیده و بیشترین بازه که توش شیری دوشیده نشده رو پیدا کنیم.
برنامه من واسه 6 تا تست درسته ولی واسه هفتمی غلطه کسی میدونه چرا؟؟؟؟؟
کد
#include<iostream>
#include<fstream>
using namespace std;
void shift(int* a,int time,int start,int n)
{
for(int i=0;i<time;i++)
{
for(int j=n;j>=start;j--)
a[j]=a[j-1];
n++;
}
}
int main()
{
ifstream fin("milk2.in");
ofstream fout("milk2.out");
int n;
int times[6000]={0};
int s,e;
int start[2],end[2];
int noot=1;
times[0]=-2;
times[1]=99999999999;
fin>>n;
for(int q=0;q<n;q++)
{
fin>>s>>e;
for(int i=0;i<=noot;i++)
{
if(s>=times[i])
{
start[0]=i;
start[1]=i+1;
}
if(e>=times[i])
{
end[0]=i;
end[1]=i+1;
}
}
if(end[0]==start[0])
{
if(end[0]%2==0)
{
shift(times,2,end[0]+1,noot+1);
times[end[0]+1]=s;
times[end[0]+2]=e;
noot+=2;
}
}
else
{
if(start[1]==end[0])
{
if(start[1]%2==1)
times[start[1]]=s;
else
times[start[1]]=e;
}
else
{
if(start[1]%2==1)
times[start[1]]=s;
if(end[0]%2==0)
times[end[0]]=e;
}
for(int i=start[1]+1;i<end[1]-1;i++)
times[i]=-1;
}
int help=noot;
for(int i=1;i<noot;i++)
{
if(times[i]==-1)
{
for(int j=i;j<noot;j++)
times[j]=times[j+1];
i--;
help--;
}
}
noot=help;
}
for(int i=2;i<noot-1;i+=2)
if(times[i]==times[i+1])
times[i]=times[i+1]=-1;
int help=noot;
for(int i=1;i<noot;i++)
{
if(times[i]==-1)
{
for(int j=i;j<noot;j++)
times[j]=times[j+1];
i--;
help--;
}
}
noot=help;
int max1=0,max2=0;
for(int i=1;i<noot-1;i+=2)
{
if(times[i+1]-times[i]>max1)
max1=times[i+1]-times[i];
}
for(int i=2;i<noot-1;i+=2)
{
if(times[i+1]-times[i]>max2)
max2=times[i+1]-times[i];
}
fout<<max1<<" "<<max2<<endl;
return 0;
}