我刷过的最难的一道红题了

P1568 赛跑

难?我都切掉了…… 各大教材有些好不好
by __OccDreamer__ @ 2019-08-08 16:01:30


```cpp #include<bits/stdc++.h> //相当于万能头文件~( ̄▽ ̄)~ using namespace std; struct xyq{ int t,v,s; }; xyq a[1005],b[1005]; bool first[2005]={0}; int la=1,lb=1; //这里把i和j命名为la和lb。 int main(){ int n,m,nowt,nowa,nowb,sum=0,i; bool can; cin>>n>>m; a[0].s=0; for(i=1;i<=n;i++){ cin>>a[i].v>>a[i].t; a[i].s=a[i-1].s+a[i].v*a[i].t; a[i].t+=a[i-1].t; } b[0].s=0; for(i=1;i<=m;i++){ cin>>b[i].v>>b[i].t; b[i].s=b[i-1].s+b[i].v*b[i].t; b[i].t+=b[i-1].t; } for(i=1;i<=n+m;i++){ //在这里为了方便,把计算和处理一起写了。 if(a[la].t<b[lb].t&&la<=n||lb>m){ nowt=a[la].t-b[lb-1].t; //温馨提示:记得-1,毕竟已经走的路程是上一个,但其他的不用减,因为是目前的速度和时间。 nowa=a[la].s; nowb=b[lb-1].s+b[lb].v*nowt; la++; }else{ nowt=b[lb].t-a[la-1].t; nowa=a[la-1].s+a[la].v*nowt; nowb=b[lb].s; lb++; } if(nowa==nowb){ first[i]=first[i-1]; continue; } first[i]=(nowa>nowb); //nowa>nowb是一个判断语句,如果判断成功,就是1,反正是0。这只是为了方便。 if(first[i]!=first[i-1]&&i!=1){ //如果是1就不要判断。 sum++; } } cout<<sum; return 0; } ```
by xh39 @ 2019-08-08 16:07:16


我发的题解
by xh39 @ 2019-08-08 16:07:24


我已经切了QWQ
by stone_juice石汁 @ 2019-08-08 16:08:45


|