PTA题目实在不会了,我知道我的方法不好,但还是想知道这种方法这么写哪里错了,求各位帮忙看看,错误的测试点是1000个数据,我把容量扩大了也没用
#include
int lefttime[105]={0},people[105]={0},a[10005]= {0},b[10005]= {0};
int n=0,temp=0,num=0,num2=0,window=0;
int wait[10005]={0},now=0;
double waittime=0;
int check(int i)
{
for(int k=0;k<window;k++)
{
if(lefttime[k]==0&&a[i]!=0)
{
n--;
lefttime[k]+=b[num2++];
a[i]--;
people[k]++;
}
}
if(a[i]!=0)
temp+=a[i];
for(int k=0;k<window;k++)
{
if(lefttime[k]==0&&temp!=0)
{
n--;
lefttime[k]+=b[num2++];
temp--;
now++;
people[k]++;
}
}
int tag=1;
for(int i=0;i<window;i++)
{
if(lefttime[i]>60)
lefttime[i]=60;
if(lefttime[i]!=0)
{
lefttime[i]--;
tag=0;
}
}
for(int i=now;i<temp+now;i++)
{
wait[i]++;
}
waittime+=temp;
return tag;
}
int main()
{
int time,work,i;
scanf("%d",&n);
int n2 = n;
for(i=0; itime,&work);
a[time]++;
b[num++]=work;
}
scanf("%d",&window);
for(i=0;;i++)
{
if(check(i)&&n==0)
break;
}
int max = 0;
for(int j=0;jif(wait[j]>max)
max=wait[j];
}
printf("%.1lf %d ",waittime/n2,max);
printf("%d\n",i);
for(int j=0;j<window-1;j++)
{
printf("%d ",people[j]);
}
printf("%d",people[window-1]);
}
#include<bits/stdc++.h>
using namespace std;
vector<vector<int> >widow(2,vector<int>(10));
int wids;
int findok(int arri)
{
int minn=0;
for(int i=0;i<wids;i++)
{
if(widow[0][i]<arri)widow[0][i]=arri;
if(widow[0][minn]>widow[0][i])minn=i;
}
widow[1][minn]++;
return minn;
}
int main()
{
int peo;cin>>peo;int peoo=peo;
int waitz=0,maxtime=0,maxwait=0;
vector<vector<int> >hum(2);
while(peo--)
{
int work,arrive;cin>>arrive>>work;
if(work>60)work=60;
hum[0].push_back(arrive);
hum[1].push_back(work);
}
cin>>wids;
for(int i=0;i<hum[0].size();i++)
{
int minn=findok(hum[0][i]);
int wait=widow[0][minn]-hum[0][i];
if(wait>0)waitz+=wait;
if(wait>maxwait)maxwait=wait;
widow[0][minn]+=hum[1][i];
}
for(int i=0;i<wids;i++)
{
maxtime=max(widow[0][i],maxtime);
}
printf("%.1f %d %d\n",waitz*1.0/peoo,maxwait,maxtime);
cout<<widow[1][0];
for(int i=1;i<wids;i++)
{
cout<<" "<<widow[1][i];
}
}