P2338 [USACO14JAN]失败的滑雪Bessie Slows Down
一道模拟的蓝题
数据类型一定不要写错啊!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int N;
char err;
double T[10005],pret,z1=1;
int cnt1;
double D[10005],pred,z2=1;
int cnt2;
int data;
double s;
double ans;
int cnt=1;
int main()
{
// freopen("test.in","r",stdin);
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
cin>>err;
scanf("%d",&data);
if(err=='T') {T[++cnt1] = data;}
else {D[++cnt2] = data;}
}
sort(T+1,T+cnt1+1);
sort(D+1,D+cnt2+1);
int l=1,r=1;
for(int i=1;i<=N;i++)
{
if((r>cnt2||((D[r]-s)*cnt+ans>=T[l]))&&(l<=cnt1))
{
if((T[l]-ans)/cnt+s>1000) {break;}
s+=((T[l]-ans)/cnt);
ans=T[l];
cnt++;
l++;
}
else
{
if(D[r]>1000) {break;}
ans+=(D[r]-s)*cnt;
s=D[r];
cnt++;
r++;
}
}
// ans=int((1000-s)*cnt+ans+0.499999);
cout<<int((1000-s)*cnt+ans+0.499999)<<endl;
return 0;
}
之前好像也一直是这个问题
//错解
for(int i=1;i<=N;i++)
{
if(z2>cnt2||s+(T[z1]-pret)*(1.0/(cnt+1))<D[z2])
{
cnt++;
s+=(T[z1]-pret)*(1.0/cnt);//t
// pred=(T[z1]-pret)*(1/cnt);
ans+=(T[z1]-pret);
pret=ans;
z1++;
}
if(z1>cnt1&&z2>cnt2) {break;}
if(z1>cnt1||s+(T[z1]-pret)*(1.0/(cnt+1))>D[z2])
{
cnt++;
ans+=(D[z2]-s)*cnt;
s+=(D[z2]-s);
pret=ans;
z2++;
}
if(z1>cnt1&&z2>cnt2) {break;}
}
if(s<1000)
ans+=(1000-s)*(cnt+1);